我如何解开这个结?如果重要的话,我使用Visual Studio作为我的编译器。显然,人们可以将MOO移动到otherClass并移动其他类,但这是一个模型,可以解决现实中发生的更复杂的问题。我认为这里需要一个前瞻性定义,但我不确定如何构建它。
这个结甚至可以解开,还是我必须将sampClass分成两个类,或者一个带接口的类?
#include <iostream>
class sampClass
{
public:
template <typename Z>
otherClass<Z> potato()
{
return otherClass<Z>(this);
}
sampClass(int a)
{
m_a = a;
}
void moo()
{
std::cout << "MOO!";
}
int m_a;
};
template <typename T>
class otherClass
{
public:
otherClass(sampClass* doMoo)
{
doMoo->moo();
}
};
int main()
{
sampClass a(5);
a.potato<int>();
return 0;
}
答案 0 :(得分:3)
这就像添加前向声明一样简单:
#include <iostream>
//
// forward declare otherClass here
//
template <typename T>
class otherClass;
class sampClass
{
public:
template <typename Z>
otherClass<Z> potato()
{
return otherClass<Z>(this);
}
sampClass(int a)
{
m_a = a;
}
void moo()
{
std::cout << "MOO!";
}
int m_a;
};
template <typename T>
class otherClass
{
public:
otherClass(sampClass* doMoo)
{
doMoo->moo();
}
};