2013-11-23 44 views
0

如果我有一個需要模板參數的可變參數的類,我怎樣才能聲明它們都是朋友?一個類如何聲明其所有可變參數模板參數的朋友?

這是我想在僞代碼的形式做什麼:

template<typename... Ts> 
class AbstractMyClass { 
    int privateInt; 
    friend Ts...; 
}; 
class OtherClass; 
using MyClass = AbstractMyClass<OtherClass>; 

class OtherClass { 
public: 
    void foo(MyClass &c){ 
     c.privateInt = 42; 
    } 
}; 
+1

object比邀請好友可能是一個更好的想法一[密鑰(http://stackoverflow.com/a/3324984/500104)( C++ 11'allow'版本)。 – Xeo

回答

0

這隻能使用「編譯時間遞歸」來完成,就像元組。要點是(我是在一個小的筆記本電腦,現在和絕不能夠舒適型):

template<class .... THINGS> class object; 

template<class T> class object { 
    friend T; 
}; 

template<class T,class ... THINGS> 
class object: public object<THINGS> { 
    friend T; 
}; 

如果C++不一樣的是,嘗試template<> class object<> {};作爲結束遞歸的一個(我終止它與在1個模板paramater)

(感謝迪特馬爾庫爾格式化)

+0

我認爲終止案例「模板類對象」需要將以前的私有部分(本例中爲'privateInt')作爲受保護的成員,以便所有朋友訪問它。做出改變,我會接受。 – odinthenerd

相關問題