演算子<< C ++のテンプレートクラスのメンバー型のオーバーロード

成熟

以下のコードには、メンバータイプ(struct Element)のテンプレートクラスがあります。そのメンバータイプのoperator <<をオーバーロードしたいただし、コードはコンパイルされません。

誰かが私がどこで間違っているのか指摘できれば幸いです。

include <iostream>
using namespace std;

// fwd decl
template<class T> class CC;

// operator<< overload template for member type CC<T>::Element
template<class T>
ostream& operator<<(ostream& os, const typename CC<T>::Element& elm) {
    return os << elm.val1 << "/" << elm.val2;
}

template<class T>
class CC
{
public:
    struct Element {    // type member
        int val1;
        int val2;
    };

    template<typename U>
    friend ostream& operator<<(ostream& os, const typename CC<U>::Element& elm);
};

int main() {
    CC<int>::Element elm{0,0};
    cout << elm << endl;     // does not compile due to this!
}
ディートマークール

テンプレートの引数は、ネストされたエンティティから推測することはできません(簡単な説明:タイプは、さまざまなテンプレートのインスタンス化の継ぎ目である可能性があります)。つまり、宣言

template<typename U>
ostream& operator<<(ostream& os, const typename CC<U>::Element& elm);

friendUを推測できないため、aの有無は考慮されません。friend演算子を非テンプレートにすることで、問題を修正できます

// ...
friend ostream& operator<<(ostream& os, const Element& elm) { ... }
// or
friend ostream& operator<<(ostream& os, const CC<T>::Element& elm) { ... }
// ...

ただし、関数はその宣言で実装する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++演算子のオーバーロードテンプレートクラス

分類Dev

C ++テンプレート内部クラスフレンド演算子のオーバーロード

分類Dev

C ++テンプレートクラスでの演算子のオーバーロードの問題

分類Dev

C ++テンプレートクラスでの演算子のオーバーロードの問題

分類Dev

ネストされた列挙型のテンプレートパラメーターでオーバーロードするC ++フレンド演算子

分類Dev

C ++のテンプレートクラスのオーバーロード演算子ostreamが機能しない

分類Dev

テンプレートクラスを使用したC ++での演算子のオーバーロード

分類Dev

C ++テンプレートメタプログラミング:演算子のオーバーロード

分類Dev

C ++テンプレートクラスと演算子のオーバーロード

分類Dev

テンプレート依存型のC ++で演算子「<<」をオーバーロード

分類Dev

c ++-テンプレートクラスでオーバーロードするフレンド演算子

分類Dev

非型パラメータを持つC ++テンプレートクラス:割り当て演算子をオーバーロードする方法は?

分類Dev

C ++インクリメント++演算子のオーバーロード

分類Dev

C ++のリンクリストのオーバーロード演算子+ =

分類Dev

子クラスのC ++オーバーロード演算子<<

分類Dev

タプルインデックス演算子のオーバーロード-C ++

分類Dev

C ++リンクリスト-コンストラクターと演算子のオーバーロード

分類Dev

[]および=演算子をオーバーロードして、C ++でテンプレートクラスの値を受け入れる

分類Dev

このコンテキスト内のc ++エラーとオーバーロード演算子+

分類Dev

C ++:キーワード演算子を使用してメンバーのコンストラクター関数をオーバーロードします

分類Dev

テンプレートc ++は、一度に複数の演算子をオーバーロードします

分類Dev

プリミティブ型のC#オーバーロード演算子

分類Dev

C ++オーバーロード演算子+、コピーコンストラクタの問題

分類Dev

C ++:ベクトル<>の演算子[]オーバーロード

分類Dev

C ++キャスト演算子のオーバーロード

分類Dev

C ++、クラスのポイントの代入演算子をオーバーロードできますか?

分類Dev

クラスとintパラメータをテンプレートとして使用するC ++オーバーロード演算子+

分類Dev

C ++クラステンプレートの継承と演算子=

分類Dev

クラスでのC ++演算子のオーバーロードの構文

Related 関連記事

  1. 1

    C ++演算子のオーバーロードテンプレートクラス

  2. 2

    C ++テンプレート内部クラスフレンド演算子のオーバーロード

  3. 3

    C ++テンプレートクラスでの演算子のオーバーロードの問題

  4. 4

    C ++テンプレートクラスでの演算子のオーバーロードの問題

  5. 5

    ネストされた列挙型のテンプレートパラメーターでオーバーロードするC ++フレンド演算子

  6. 6

    C ++のテンプレートクラスのオーバーロード演算子ostreamが機能しない

  7. 7

    テンプレートクラスを使用したC ++での演算子のオーバーロード

  8. 8

    C ++テンプレートメタプログラミング:演算子のオーバーロード

  9. 9

    C ++テンプレートクラスと演算子のオーバーロード

  10. 10

    テンプレート依存型のC ++で演算子「<<」をオーバーロード

  11. 11

    c ++-テンプレートクラスでオーバーロードするフレンド演算子

  12. 12

    非型パラメータを持つC ++テンプレートクラス:割り当て演算子をオーバーロードする方法は?

  13. 13

    C ++インクリメント++演算子のオーバーロード

  14. 14

    C ++のリンクリストのオーバーロード演算子+ =

  15. 15

    子クラスのC ++オーバーロード演算子<<

  16. 16

    タプルインデックス演算子のオーバーロード-C ++

  17. 17

    C ++リンクリスト-コンストラクターと演算子のオーバーロード

  18. 18

    []および=演算子をオーバーロードして、C ++でテンプレートクラスの値を受け入れる

  19. 19

    このコンテキスト内のc ++エラーとオーバーロード演算子+

  20. 20

    C ++:キーワード演算子を使用してメンバーのコンストラクター関数をオーバーロードします

  21. 21

    テンプレートc ++は、一度に複数の演算子をオーバーロードします

  22. 22

    プリミティブ型のC#オーバーロード演算子

  23. 23

    C ++オーバーロード演算子+、コピーコンストラクタの問題

  24. 24

    C ++:ベクトル<>の演算子[]オーバーロード

  25. 25

    C ++キャスト演算子のオーバーロード

  26. 26

    C ++、クラスのポイントの代入演算子をオーバーロードできますか?

  27. 27

    クラスとintパラメータをテンプレートとして使用するC ++オーバーロード演算子+

  28. 28

    C ++クラステンプレートの継承と演算子=

  29. 29

    クラスでのC ++演算子のオーバーロードの構文

ホットタグ

アーカイブ