テンプレート化された構造体の<<演算子をオーバーライドする

hippozhipos

numcpp.h ファイル

    #include "iostream"        

    namespace numcpp{

    template<typename T>
    struct Vector
    {
        std::vector<T> v;
    };

    template<typename T>
    struct Matrix
    {
        std::vector<T> m;

        //template<typename T>
        friend std::ostream& operator << (std::ostream& out, const mf& mat);
    };

    typedef Vector<float> vf;
    typedef Matrix<vf> mf;
    }

coutが印刷できるように<<演算子をオーバーロードしようとしていますmf最初に、オーバーロード関数を直接mf引数を取る友人にしようとしましたこれを行ったのはMatrix、議論として取り上げた場合、テンプレートを処理する必要があり、その方法がわからないためです。

numcpp.cpp ファイル

#include "numcpp.h"

namespace numcpp{

std::ostream& operator << (std::ostream& out, const mf& mat) 
{
    //overloaded out here
    return out;
}
}

main.cpp

#include "iostream"
#include "numcpp.h"

int main()
{
    numcpp::mf inputs;
    // inputs is filled with random numbers here
    std::cout << inputs;
}

しかし、これはidentified mf is undefined行の.hファイルにエラー与えますfriend std::ostream& operator << (std::ostream& out, const mf& mat);

そこで、このアプローチをやめMatrix、.cppファイルを変更せずにフレンド関数宣言を削除してみましたしかし、今は別のエラーが表示されますno operator << matches these operandsこれは、オーバーロードがnumcpp名前空間で行われるため名前空間のmain外側にあるものが表示されないためだと思います。

素晴らしい

通常必要なのは、ヘッダーファイルにテンプレートを定義することです。コンパイラがテンプレートのインスタンス化を行えるようにするには、呼び出しサイトで定義を使用できる必要があります。

可能であれば、最も簡単な方法は、定義をクラス定義に入れることです。

template<typename T>
struct Matrix
{
    std::vector<T> m;

    // using Matrix here is allowed and refers to the current instatiation, equivalent to writing Matrix<T>
    friend std::ostream& operator << (std::ostream& out, const Matrix& mat) {
        ...
        return out;
    }
};

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレート化されたクラスのメンバー構造体を特殊化する方法

分類Dev

テンプレート化されたクラスのメンバー構造体を特殊化する方法

分類Dev

構造体のテンプレート化されたtypefefを構造体に含める方法

分類Dev

テンプレート化された再帰的なPOD構造体の初期化

分類Dev

テンプレート化されたクラスのメンバー構造体のostreamをオーバーロードする方法

分類Dev

構造体の二項<<演算子をオーバーライドする

分類Dev

テンプレート化された親クラスで定義された構造体の初期化

分類Dev

代入演算子と比較演算子をオーバーライドするPowershell

分類Dev

テンプレート化された演算子のオーバーロードを特殊化する方法は?

分類Dev

C ++のコンストラクターを使用したテンプレート化されたtypedef構造体

分類Dev

テンプレート構造体のオーバーロード演算子

分類Dev

テンプレート化された構造体の部分的な特殊化を削除する

分類Dev

Pythonで[]演算子をオーバーライドする方法は?

分類Dev

ʻis`演算子をオーバーライドする方法

分類Dev

Pythonでnot演算子をオーバーライドする

分類Dev

非型テンプレート構造体のメンバー構造体のコピー代入演算子をオーバーロードします

分類Dev

テンプレート化されたクラス内のテンプレート化された構造体の専門化

分類Dev

テンプレート化された構造体が保持するデータ型の決定

分類Dev

テンプレート構造で定義されたメンバー構造の演算子<<をオーバーロード

分類Dev

テンプレート化された変換演算子でこの構造を明確にする方法は?

分類Dev

演算子のオーバーロード==テンプレート化されたイテレータを使用する無料の関数

分類Dev

コンパイラにテンプレート化された構造体を認識させる方法は?

分類Dev

C構造体をオーバーロードする演算子

分類Dev

テンプレート呼び出し演算子と汎用ラムダを使用した構造体のオーバーロード-gccvs clang

分類Dev

特定のタイプの+演算子をオーバーライドする

分類Dev

テンプレート化された構造体スコープの宣言を使用してテンプレート化

分類Dev

Pythonのオーバーライド等式演算子をブーストする

分類Dev

magrittrパイプ演算子をオーバーライドする方法は?

分類Dev

テンプレート化された構造体オブジェクトポインタを返すのに問題がある

Related 関連記事

  1. 1

    テンプレート化されたクラスのメンバー構造体を特殊化する方法

  2. 2

    テンプレート化されたクラスのメンバー構造体を特殊化する方法

  3. 3

    構造体のテンプレート化されたtypefefを構造体に含める方法

  4. 4

    テンプレート化された再帰的なPOD構造体の初期化

  5. 5

    テンプレート化されたクラスのメンバー構造体のostreamをオーバーロードする方法

  6. 6

    構造体の二項<<演算子をオーバーライドする

  7. 7

    テンプレート化された親クラスで定義された構造体の初期化

  8. 8

    代入演算子と比較演算子をオーバーライドするPowershell

  9. 9

    テンプレート化された演算子のオーバーロードを特殊化する方法は?

  10. 10

    C ++のコンストラクターを使用したテンプレート化されたtypedef構造体

  11. 11

    テンプレート構造体のオーバーロード演算子

  12. 12

    テンプレート化された構造体の部分的な特殊化を削除する

  13. 13

    Pythonで[]演算子をオーバーライドする方法は?

  14. 14

    ʻis`演算子をオーバーライドする方法

  15. 15

    Pythonでnot演算子をオーバーライドする

  16. 16

    非型テンプレート構造体のメンバー構造体のコピー代入演算子をオーバーロードします

  17. 17

    テンプレート化されたクラス内のテンプレート化された構造体の専門化

  18. 18

    テンプレート化された構造体が保持するデータ型の決定

  19. 19

    テンプレート構造で定義されたメンバー構造の演算子<<をオーバーロード

  20. 20

    テンプレート化された変換演算子でこの構造を明確にする方法は?

  21. 21

    演算子のオーバーロード==テンプレート化されたイテレータを使用する無料の関数

  22. 22

    コンパイラにテンプレート化された構造体を認識させる方法は?

  23. 23

    C構造体をオーバーロードする演算子

  24. 24

    テンプレート呼び出し演算子と汎用ラムダを使用した構造体のオーバーロード-gccvs clang

  25. 25

    特定のタイプの+演算子をオーバーライドする

  26. 26

    テンプレート化された構造体スコープの宣言を使用してテンプレート化

  27. 27

    Pythonのオーバーライド等式演算子をブーストする

  28. 28

    magrittrパイプ演算子をオーバーライドする方法は?

  29. 29

    テンプレート化された構造体オブジェクトポインタを返すのに問題がある

ホットタグ

アーカイブ