単純なクラスXと、テンプレート化されたクラスY <T、U>のセットがあります。最初のテンプレート化パラメータがたまたまXであるすべてのクラスYを、X自体のフレンドにしたいと思います。以下は私が望むものをうまく伝えていると思いますが、friendステートメントはコンパイルエラーを出します。
template<typename T, typename U>
class Y {
};
class X {
public:
X(int value) : i(value) {}
const int& getI() const { return i; }
private:
int i;
template<class U> friend class Y<X,U>;
};
フレンドステートメントのテンプレート化がまったく許可されているかどうかはわかりません(フレンドステートメントの部分的なテンプレート化は言うまでもありません)。これを行う方法はありますか?それとも、すべての友達を1人ずつリストアップすることに固執していますか?
ありがとう、マット
質問の部分的でない部分の構文は次のとおりです。
class X {
template<class T, class U> friend class Y;
};
ほとんどの場合、それで十分だと思います。
C ++ 11を使用すると、テンプレート化されたエイリアスを実際に友達にすることができます。
template<typename T, typename U>
class Y { };
class X {
public:
X(int value) : i(value) {}
const int& getI() const { return i; }
private:
int i;
template<class U> using YX = Y<X,U>;
template<class U> friend class YX;
};
しかし、それはうまくいかないようです(上記の友達宣言がまったく効果があるかどうかはわかりません)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加