При написании фреймворка у меня возникла следующая проблема: у меня есть class A
и class B
, которые получены из class A
.
class A
имеет функцию, которая возвращает 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*
.Можно ли написать предварительную декларацию?Или мне нужно что-то другое?
Да, я искал и вижу много сообщений о объявлениях шаблонов, но не могу найти решение для моей индивидуальной проблемы.Это немного сложно для меня.
Спасибо за помощь.