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)從一個不同的問題/答案) –