模板参数中的is_base_of - 类未命名类型

时间:2014-02-02 18:07:25

标签: c++ templates c++11

只是想知道为什么我不能在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

我哪里出错?

1 个答案:

答案 0 :(得分:8)

你忘了课堂钥匙:

   template<class A, class B, bool isbaseof = std::is_base_of<A, B>::value>
   struct myclass
// ^^^^^^

(类密钥可以是classstructunion中的任何一种。)