フレンドクラスの部分的なテンプレートの特殊化?

マシュー・ブシェ

単純なクラス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人ずつリストアップすることに固執していますか?

ありがとう、マット

chtz

質問の部分的でない部分の構文は次のとおりです。

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]

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレートクラスの部分特殊化構文

分類Dev

クラス定義外の部分的なテンプレート特殊化定義

分類Dev

部分的なクラステンプレートの特殊化c ++ 11

分類Dev

std :: functionのようなテンプレートクラスの部分的なテンプレートの特殊化

分類Dev

ネストされたテンプレートテンプレートクラスの部分的な特殊化

分類Dev

部分的なテンプレートの特殊化エラー

分類Dev

クラステンプレートの部分的特殊化の同等性

分類Dev

クラステンプレートの部分的な特殊化とクラスメンバーの特殊化について混乱する何か

分類Dev

SFINAEおよび部分クラステンプレートの特殊化

分類Dev

クラステンプレートの部分的な特殊化のマッチング

分類Dev

内部クラスのテンプレートの特殊化

分類Dev

部分的なテンプレートメンバーの特殊化

分類Dev

部分的な特殊化によるテンプレートのサブクラス化

分類Dev

部分テンプレート-テンプレートベースの特殊化と明示的な部分テンプレートの特殊化

分類Dev

C ++部分的なテンプレートの特殊化の混乱

分類Dev

クラスと関数テンプレートの特殊化

分類Dev

C ++クラステンプレートの特殊化

分類Dev

`template <auto>`と部分的なクラステンプレートの特殊化の順序

分類Dev

部分的なテンプレートの特殊化SFINAE

分類Dev

C ++テンプレートの部分的な特殊化

分類Dev

テンプレートの部分的な特殊化

分類Dev

std :: hashテンプレートの部分的な特殊化

分類Dev

部分的な特殊化によるクラステンプレート引数の演繹

分類Dev

テンプレートクラスメソッドの部分的な特殊化またはインスタンス化

分類Dev

クラステンプレートメソッドの特殊化

分類Dev

テンプレート化されたクラス内のメソッドの完全な特殊化

分類Dev

完全に特殊化されたクラステンプレート用の関数テンプレートの明示的な特殊化

分類Dev

複数のパラメーターに対するC ++部分クラステンプレートの特殊化

分類Dev

テンプレートコンストラクタでのテンプレートクラスの特殊化

Related 関連記事

  1. 1

    テンプレートクラスの部分特殊化構文

  2. 2

    クラス定義外の部分的なテンプレート特殊化定義

  3. 3

    部分的なクラステンプレートの特殊化c ++ 11

  4. 4

    std :: functionのようなテンプレートクラスの部分的なテンプレートの特殊化

  5. 5

    ネストされたテンプレートテンプレートクラスの部分的な特殊化

  6. 6

    部分的なテンプレートの特殊化エラー

  7. 7

    クラステンプレートの部分的特殊化の同等性

  8. 8

    クラステンプレートの部分的な特殊化とクラスメンバーの特殊化について混乱する何か

  9. 9

    SFINAEおよび部分クラステンプレートの特殊化

  10. 10

    クラステンプレートの部分的な特殊化のマッチング

  11. 11

    内部クラスのテンプレートの特殊化

  12. 12

    部分的なテンプレートメンバーの特殊化

  13. 13

    部分的な特殊化によるテンプレートのサブクラス化

  14. 14

    部分テンプレート-テンプレートベースの特殊化と明示的な部分テンプレートの特殊化

  15. 15

    C ++部分的なテンプレートの特殊化の混乱

  16. 16

    クラスと関数テンプレートの特殊化

  17. 17

    C ++クラステンプレートの特殊化

  18. 18

    `template <auto>`と部分的なクラステンプレートの特殊化の順序

  19. 19

    部分的なテンプレートの特殊化SFINAE

  20. 20

    C ++テンプレートの部分的な特殊化

  21. 21

    テンプレートの部分的な特殊化

  22. 22

    std :: hashテンプレートの部分的な特殊化

  23. 23

    部分的な特殊化によるクラステンプレート引数の演繹

  24. 24

    テンプレートクラスメソッドの部分的な特殊化またはインスタンス化

  25. 25

    クラステンプレートメソッドの特殊化

  26. 26

    テンプレート化されたクラス内のメソッドの完全な特殊化

  27. 27

    完全に特殊化されたクラステンプレート用の関数テンプレートの明示的な特殊化

  28. 28

    複数のパラメーターに対するC ++部分クラステンプレートの特殊化

  29. 29

    テンプレートコンストラクタでのテンプレートクラスの特殊化

ホットタグ

アーカイブ