前向声明:模板和继承

时间:2011-05-07 18:11:12

标签: c++ templates inheritance declaration

编写框架时遇到以下问题: 我class Aclass B来自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*来处理未知。是否有可能写出前瞻性声明?或者我需要不同的东西?

是的,我搜索过,我发现有很多关于模板声明的帖子,但找不到解决我个人问题的帖子。这对我来说有点复杂。

感谢您的帮助。

1 个答案:

答案 0 :(得分:9)

您的前瞻性声明不正确。它必须是:

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