只是想知道为什么我不能在C ++模板参数中使用is_base_of,如下所示:
#include <iostream>
#include <type_traits>
using namespace std;
struct base
{
};
struct derived : public base
{
int value;
};
template<class A, class B, bool isbaseof = std::is_base_of<A,B>::value> myclass
{
void foo() {
cout << "Generic..";
}
};
template<class A, class B> myclass<A,B,true>
{
void foo() {
cout << "A is not base of B";
}
};
int main() {
return 0;
}
错误:
prog.cpp:17:73: error: ‘myclass’ does not name a type
template<class A, class B, bool isbaseof = std::is_base_of<A,B>::value> myclass
我哪里出错?
答案 0 :(得分:8)
你忘了课堂钥匙:
template<class A, class B, bool isbaseof = std::is_base_of<A, B>::value>
struct myclass
// ^^^^^^
(类密钥可以是class
,struct
或union
中的任何一种。)