2
我试图做一个程序,它在结构上与此类似:如何在一个层次结构类中使用std :: is_base_of?
#include <type_traits>
template <class A, class B, class C = void>
class Test {};
template <class A, class B>
class Test<A *, B *, typename std::enable_if<std::is_base_of<A, B>::value>::type> {
public:
int a;
};
class X {};
class Y : public X {
private:
using T = Test<X *, Y *>;
T t;
public:
Y() : t() {t.a = 1;}
};
也就是说,我想有同时使用基地和派生类:导出类中的模板实例,并确保有是两个类之间的派生关系。
但是这不能在gcc 6.1.0下编译。错误信息是:
error: invalid use of incomplete type 'class Y'
那么我该怎么做才能使这段代码有效?谢谢!
我相信明确指出'std :: is_base_of'的第二个参数必须是完整类型, [here](http://en.cppreference.com/w/cpp/types/is_base_of) –
但是你可以像你一样[适当的测试] [http://melpon.org/wandbox/permlink/ XtyrECZMSLVVywKl)...(我在这里使用[Yakk的代码](http://stackoverflow.com/a/40764548/4324224)从一个不同的问题/答案) –