我对以下问题感到困惑。我想写一些特征结构来测试某个类是否派生自另一个。这可以通过 boost::is_base_of<> 解决。但是,我要测试的基类有一个免费的未定义模板参数。
这是一些代码示例:
template<typename T> class Base {};
class IntDeriv : Base<int> {};
class Foo {};
template< class TestClass >
struct is_derived_from_Base {
// how to create something that does the following and forces the compiler to deduce T
static const bool value = boost::is_base_of< Base<T> , TestClass >::value;
};
int main() {
cout << is_derived_from_Base<Foo> << endl; // should print 0
cout << is_derived_from_Base<IntDeriv> << endl; // should print 1
}
问题是如何推导出T
里面Base<T>
的is_base_of
。这可能吗?我闻到了一些 enable_if 但我不知道如何把它放在一起。