gpt4 book ai didi

c++ 以此类为类型继承类模板

转载 作者:行者123 更新时间:2023-11-30 02:37:08 26 4
gpt4 key购买 nike

我希望我的类模板 A 能够拥有一个仅在 B 中定义的成员,而 B 继承 A。

这是理论上可行但无法编译的代码。

template< typename T >
class A
{
public:
typename T::member mSomething;
};

class B : public A< B >
{
public:
struct member
{
int val;
};
};

int main( int argc, char** argv )
{
B* b = new B;
A<B>* a = b;

b->mSomething.val = 5;

if( a->mSomething.val == 5 )
{
std::cout << "doing good";
}

return 0;
}

此代码无法在 MSVCP 2010 上编译并出现错误“‘member’:不是‘B’的成员”

我该如何解决这个问题?

最佳答案

CRTP 基类不能访问派生类中定义的类型。当A<B>被实例化,B是不完整的类型,没有成员,因此您无法访问内容。

必须在B 之外定义类型.

关于c++ 以此类为类型继承类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31999242/

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