クラスB<certain X>
は、すべてC<any,certain X>
と友人になりたいと考えています。
私はそれをする方法を見つけるために私の髪を引っ張っています。"template using"で定義されたテンプレート(エイリアス)クラスを持つ友達とのやり取りは?
以下は、問題のある行を追加しない限り正常にコンパイルされた完全なコードです。ここで
#include <string>
using namespace std;
enum EN{ EN1,EN2 };
template<EN T1,class T2> class C{
public: C(){
std::cout<<T1<<std::endl;
}
};
template<class T2> class B{
template<EN T1> using CT = C<T1,T2>;
//template<EN TX> friend class CT; //<-- error if insert this line
public: static void test(){
CT<EN1> ct;
}
};
int main() {
B<int>::test();
return 0;
}
(すべての失敗)私が試したものです: -
template<EN T1> friend class C<T1,T2>;
template<EN TX> friend class CT;
template<typename TX> friend class CT;
template<class TX> friend class CT;
template<class TX> friend class CT<TX>;
template<typename> friend typename CT;
質問:挿入する正しい文の(1ライン)とは何ですか?
可能であれば、friendのステートメントにC
ではなくCT
を使用します。
私はa similar questionとthisと読みましたが、私よりも簡単です。
(私はC++に新しいです。)
プレーンC(CTとのコントラスト)と同じですか?すなわち、2つのフレンドステートメントが必要ですか? – javaLover
@javaLoverはい、それは同じです。 – songyuanyao