gpt4 book ai didi

c++ - 使用 CRTP 继承

转载 作者:行者123 更新时间:2023-11-30 04:39:19 25 4
gpt4 key购买 nike

我有这 3 个类。

class A  
{
public:
virtual void Func() = 0;
};

template<class T>
class B : public A
{
public:
void Func()
{
cout << "In B" << endl;
static_cast<T*>(this)->Func();
}
};

class C : public B<C>
{
public:
void Func()
{
cout << "In C" << endl;
}
};

然后,我这样做:

int main(int argc, char **argv)  
{
A *a = new C;
a->Func();

return 0;
}

它打印:“在 C 中”。

如果我这样做,

int main(int argc, char **argv)  
{
B<C> *a = new C;
a->Func();

return 0;
}

它再次打印“In C”

这是怎么回事?

最佳答案

您正在调用已重载此函数的 C 类对象的虚拟成员函数。它调用类 C 中的函数。

此外,这不是 CRTP,因为模板化类 B 不继承自类模板参数。

关于c++ - 使用 CRTP 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325269/

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