зеркало из https://github.com/mozilla/gecko-dev.git
Bug 616262 - Add mozilla/TypeTraits.h with mozilla::Conditional and mozilla::IsBaseOf traits, similar to resp. C++11 std::conditional and std::is_base_of. r=Waldo
This commit is contained in:
Родитель
f382b1eb95
Коммит
6505be978b
|
@ -0,0 +1,54 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef mozilla_TypeTraits_h_
|
||||
#define mozilla_TypeTraits_h_
|
||||
|
||||
/* Template-based metaprogramming and type-testing facilities. */
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
/*
|
||||
* IsBaseOf allows to know whether a given class is derived from another.
|
||||
*
|
||||
* Consider the following class definitions:
|
||||
*
|
||||
* class A {};
|
||||
* class B : public A {};
|
||||
* class C {};
|
||||
*
|
||||
* mozilla::IsBaseOf<A, B>::value is true;
|
||||
* mozilla::IsBaseOf<A, C>::value is false;
|
||||
*/
|
||||
template <class Base, class Derived>
|
||||
class IsBaseOf
|
||||
{
|
||||
private:
|
||||
static char Test(Base *);
|
||||
static int Test(...);
|
||||
public:
|
||||
static const bool value = (sizeof(Test(static_cast<Derived *>(0))) == sizeof(char));
|
||||
};
|
||||
|
||||
/*
|
||||
* Conditional selects a class between two, depending on a given boolean value.
|
||||
*
|
||||
* mozilla::Conditional<true, A, B>::Type is A;
|
||||
* mozilla::Conditional<false, A, B>::Type is B;
|
||||
*/
|
||||
template <bool condition, class A, class B>
|
||||
struct Conditional
|
||||
{
|
||||
typedef A Type;
|
||||
};
|
||||
|
||||
template <class A, class B>
|
||||
struct Conditional<false, A, B>
|
||||
{
|
||||
typedef B Type;
|
||||
};
|
||||
|
||||
} /* namespace mozilla */
|
||||
|
||||
#endif /* mozilla_TypeTraits_h_ */
|
|
@ -24,6 +24,7 @@ EXPORTS_mozilla += \
|
|||
Scoped.h \
|
||||
StandardInteger.h \
|
||||
ThreadLocal.h \
|
||||
TypeTraits.h \
|
||||
Types.h \
|
||||
Util.h \
|
||||
$(NULL)
|
||||
|
|
Загрузка…
Ссылка в новой задаче