前向声明:模板和继承

Forward declarations: templates and inheritance

本文关键字:继承 声明      更新时间:2023-10-16

编写框架时,我遇到了以下问题:我有class Aclass B wchich是从class A衍生出来的.

class A有一个函数 wchich 返回B*

当然,这并不难:

#include <iostream>
using namespace std;
class B; // forward declaration
class A
{
    public:
        B* ReturnSomeData();
};
class B : public A
{
};
// Implementation:
B* A::ReturnSomeData()
{
    return new B; // doesn't matter how the function makes pointer
}
int main()
{
    A sth;
    cout << sth.ReturnSomeData(); // print adress
}

但是我不得不使用像这里这样的模板:

#include <iostream>
using namespace std;
// This "forward declaration":
template <class Number>
class B<Number>;
// cannot be compiled:
// "7 error: 'B' is not a template"
template <class Number>
class A
{
    public:
        B<Number>* ReturnSomeData();
};
template <class Number>
class B : public A<Number>
{
};
// Implementation:
template <class Number>
B<Number>* A<Number>::ReturnSomeData()
{
    return new B<Number>;
}
int main()
{
    A<int> sth;
    cout << sth.ReturnSomeData();
}

查看代码。如您所见,我不知道如何处理未知的A B*.是否可以写前向声明?或者我需要一些不同的东西?

是的,我

搜索了一下,看到有很多关于模板声明的帖子,但找不到我个人问题的解决方案。这对我来说有点复杂。

感谢您的帮助。

您的前向声明不正确。 它需要:

template <class Number>
class B;
       ^ no argument list