gpt4 book ai didi

c++ - 如何在其中一个层次结构类中使用 std::is_base_of?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:55 29 4
gpt4 key购买 nike

我正在尝试做一个结构类似于此的程序:

#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'

那么我应该怎么做才能使这段代码起作用呢?谢谢!

最佳答案

这是因为当你指定一个类型为非指针/非引用对象时,要求你应该事先定义(存储)该类型。如果您使用 T 作为指针,它应该这样工作:

class Y : public X {
private:
using T = Test<X *, Y *>;
T* t;
public:
Y() : t(new T) {t->a = 1;}
};

这当然有其自身的一些缺点。

关于c++ - 如何在其中一个层次结构类中使用 std::is_base_of?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40847159/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com