2017-05-15 141 views
1

我該如何解開這個結?如果它很重要,我使用Visual Studio作爲我的編譯器。顯然,人們可以將MOO移動到其他類並將其他類移動到其他類,但這是現實中發生的更復雜問題的模型。我認爲這裏需要一個前向定義,但我不知道如何構造它。向前聲明需要返回到原始類的模板類?

這個結甚至可以解開,還是必須將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

以上'otherClass'加上'類otherClass;'不要#包括頭。 – AndyG

回答

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(); 
    } 
}; 
+0

謝謝 - 與普通模板類一樣好。而且您不必概述該方法。 – Carbon