【发布时间】:2010-01-14 07:59:11
【问题描述】:
假设我们有以下模板类
template<typename T> class Wrap { /* ... */ };
我们无法改变Wrap。这很重要。
假设有从Wrap<T> 派生的类。例如,
class NewInt : public Wrap<int> { /* ... */ };
class MyClass : public Wrap<myclass> { /* ... */ };
class Foo : public Wrap<Bar> { /* ... */ };
我们也无法更改这些课程。以上所有课程都是第 3 方。他们不是我的。
我需要以下编译时间type_traits:
template<class T>
struct is_derived_from_Wrap {
static const bool value = /* */;
};
我需要什么?
assert(is_derived_from_Wrap<Int>::value == true); // Indeed I need static assert
assert(is_derived_from_Wrap<MyClass>::value == true);
assert(is_derived_from_Wrap<char>::value == false);
struct X {};
assert(is_derived_from_Wrap<X>::value == false);
【问题讨论】:
-
但是你能改变
Int和MyClass吗? :p -
为你的类型特征命名不是更好吗:
has_Wrap_for_base?实际上,MyClass 并不是 Wrap 的基础。 -
我很困惑。是
int还是Int?还有myClass还是MyClass?还是这些不同? -
@dtrosset:是的。你说的对。我的英语不好。
-
@sbi: 不同的类。
标签: c++ templates specialization typetraits compile-time-constant