2014-02-19 238 views
0

我想改善我的通用架構,並且我已經決定使用這種類型的模糊上下文引用的系統將是我的目的的理想選擇。但是,我無法弄清楚如何使語法起作用。我甚至不知道這樣的事是否可能!我有一個完成大致相同的事情,但是這將是最好稍微shiestier選擇:C++非類型模板模板參數,參考*這

class IContained 
{ 
public: 
    virtual int getInt() = 0; 
}; 
typedef std::shared_ptr<IContained>IContainedPtr; 

template<template<class RefType, RefType& itsRef> class ContainedType> 
class TestClass 
{ 
    TestClass() : 
     myContained(new ContainedType < TestClass, *this>()) 
    { 

    } 

    int getContextInt() 
    { 
     return 3; 
    } 

    IContainedPtr myContained; 
}; 

template<class RefType, RefType& itsRef> 
class Contained: 
    virtual public IContained 
{ 

    int getInt() 
    { 
     return itsRef.getContextInt(); 
    } 
}; 

TEST(POTATO, PARTY) 
{ 
    TestClass<Contained> myTest(); 

    int thing = myTest.myContained->getInt(); 

    EXPECT_EQ(thing, 3); 
} 
+0

可能會更好地使用單詞或甚至更好的類圖解釋您正在嘗試完成的任務。你的代碼甚至沒有編譯,所以很難僅僅根據代碼來推斷問題。 –

+0

你能否試圖縮小範圍,你想得到什麼幫助? 「讓它爲我工作」有點太寬泛。 – Warlord

+0

對不起,我以爲有人可能通過視覺認出了這個問題。結果有人做了,謝天謝地。我包含了我的GTest內容,這樣你就可以看到我想如何實現這些類。這將需要一段時間來解釋如何適合上下文... 無論如何感謝您的時間,傢伙。我現在知道它有什麼問題。 – WhittlesJr

回答

0

我不知道你想實現什麼,但我可以解釋爲什麼你不能使用

*this 

作爲模板參數。模板爲您提供編譯時多態性。這意味着所有模板參數在編譯時應該是已知的。

this 

是一個類實例變量,是類實例的地址,所以在編譯時無法確定。與

*this 
+0

啊,這一定是問題所在。那麼,球。哦,我得和B計劃一起去。謝謝! – WhittlesJr