gpt4 book ai didi

c++ - 我做了什么?需要在模板类的方法中实例化派生类

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

我有一节课,说A

template <typename T> class A
{
} ;

和派生自 A<T> 的类,(保留类型通用性)

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

出现了一种情况,我需要实例化一个 B<T>A<T> 中声明的方法内.呃哦。

template <typename T> class A
{
void go()
{
B<T> * newB = new B<T>() ; // oh boy, not working..
}
} ;

我应该怎么做以及如何解决这个问题?

最佳答案

你需要打破两个类之间的循环依赖。在这种情况下微不足道:只需定义你的 go() 函数:

template <typename T> class A
{
public:
void go();
} ;

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

template <typename T>
void A<T>::go()
{
B<T> * newB = new B<T>() ;
}

我更喜欢行外定义,即使在内联函数时也是如此,因为它避免了不必要的细节使界面困惑。我也更喜欢没有循环依赖(当然不是在 base 和 derived 之间),但它总是无法避免。

关于c++ - 我做了什么?需要在模板类的方法中实例化派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13595702/

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