转发声明一个需要返回原始类的模板类?

时间:2017-05-15 20:26:24

标签: c++

我如何解开这个结?如果重要的话,我使用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;
}

1 个答案:

答案 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();
    }
};