テンプレート演算子[]が奇妙なC2676をオーバーロードしています

オジュロット

テンプレート化されたクラスで[int]演算子をオーバーロードしようとしていますが、常にC2676エラーが発生し、その後にVisual StudioE0349が続きます。「これらのオペランドに一致する演算子[]はありませんWMSTR [int]」

私のテンプレートクラス:

template <typename T, unsigned int N>
class MyString{
    public:

    // ... Non relevant tested code

    template<typename T, unsigned int N>
    T& operator[](int index) {
        // Assert index size
        SLOW_ASSERT(index >= 0 && index < N);
        // Return current value
        return m_buffer[index];
    }

    template<typename T, unsigned int N>
    const T& operator[](int index) const {
        // Assert index size
        SLOW_ASSERT(index >= 0 && index < N);
        // Return current value
        return m_buffer[index];
    }

    private:
    T m_buffer[N];
}

SLOW_ASSERT(...)はassert(...)の単なるラッパーです

メインの内容:

#include "path_to_template.h"
typedef MyString<wchar_t, 24> WMSTR;

int main(void){
   WMSTR str = L"Test";
   str[0] = L'X'; // <-- Error here

   return 0;
}
ソンユアンヤオ

両方operator[]を関数テンプレートとして宣言しているので、それらのテンプレートパラメータを推測できず、呼び出しが失敗します。

それらを非テンプレートにすることはうまくいくはずです。私はあなただけのテンプレートパラメータを参照したいとTし、NクラステンプレートのMyStringの中でoperator[]

T& operator[](int index) {
    // Assert index size
    SLOW_ASSERT(index >= 0 && index < N);
    // Return current value
    return m_buffer[index];
}

const T& operator[](int index) const {
    // Assert index size
    SLOW_ASSERT(index >= 0 && index < N);
    // Return current value
    return m_buffer[index];
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

演算子をテンプレートでオーバーロードしますが、再定義を防ぎます

分類Dev

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

分類Dev

C ++印刷テンプレートコンテナエラー(エラー: '演算子<<'のあいまいなオーバーロード)を理解していますか?

分類Dev

クラステンプレートにoperator +を使用して追加をオーバーロードする演算子

分類Dev

C ++テンプレート演算子をオーバーロードしてプライベートプロパティにアクセスする方法

分類Dev

演算子がC ++でオーバーロードされていないかどうかを確認します

分類Dev

C ++でインクリメント演算子をオーバーロードしようとしています

分類Dev

CythonがC ++演算子をインポートする:「演算子 '+ ='のオーバーロードはまだサポートされていません。」

分類Dev

プロパティタイプがMono.Cecilで==演算子をオーバーロードしていないかどうかを確認します

分類Dev

テンプレート関数を使用してベクトルに要素を追加するために<<演算子をオーバーロードする方法は?(c ++)

分類Dev

テンプレートパラメータがそれを提供する場合、条件付きで比較演算子のオーバーロードを提供します

分類Dev

C ++ 20の概念では、演算子のオーバーロードとユーザー定義のテンプレート演算子のオーバーロード関数を組み合わせる必要があります

分類Dev

汎用テンプレートを使用してクラスの演算子をオーバーロードするにはどうすればよいですか?

分類Dev

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

分類Dev

C ++で演算子オーバーロードを使用してテンプレートを使用することは可能ですか?

分類Dev

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

分類Dev

このコンテキスト内でプライベートですか?<<演算子をオーバーロードしようとしています

分類Dev

複雑な演算子のオーバーロードとテンプレート

分類Dev

テンプレート関数呼び出し演算子のオーバーロードへの参照を渡す

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

C ++-演算子のオーバーロードを使用してconstテンプレートタイプとnon-constテンプレートタイプを比較することはできません

分類Dev

オーバーロードされた演算子 '[]'の使用は、テンプレートキャスト演算子ではあいまいです

分類Dev

フレンド関数を使用してテンプレートクラスの外部で演算子==をオーバーロードする方法は?

分類Dev

ポインターと構築されていないテンプレートオブジェクトを取得する演算子をオーバーロードできますか?

分類Dev

<<演算子がオーバーロードされた単純なテンプレートクラスが失敗し、「template-idの使用が無効です」

分類Dev

ジェネリックテンプレートostream <<演算子のC ++あいまいなオーバーロード

Related 関連記事

  1. 1

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

  2. 2

    演算子をテンプレートでオーバーロードしますが、再定義を防ぎます

  3. 3

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

  4. 4

    C ++印刷テンプレートコンテナエラー(エラー: '演算子<<'のあいまいなオーバーロード)を理解していますか?

  5. 5

    クラステンプレートにoperator +を使用して追加をオーバーロードする演算子

  6. 6

    C ++テンプレート演算子をオーバーロードしてプライベートプロパティにアクセスする方法

  7. 7

    演算子がC ++でオーバーロードされていないかどうかを確認します

  8. 8

    C ++でインクリメント演算子をオーバーロードしようとしています

  9. 9

    CythonがC ++演算子をインポートする:「演算子 '+ ='のオーバーロードはまだサポートされていません。」

  10. 10

    プロパティタイプがMono.Cecilで==演算子をオーバーロードしていないかどうかを確認します

  11. 11

    テンプレート関数を使用してベクトルに要素を追加するために<<演算子をオーバーロードする方法は?(c ++)

  12. 12

    テンプレートパラメータがそれを提供する場合、条件付きで比較演算子のオーバーロードを提供します

  13. 13

    C ++ 20の概念では、演算子のオーバーロードとユーザー定義のテンプレート演算子のオーバーロード関数を組み合わせる必要があります

  14. 14

    汎用テンプレートを使用してクラスの演算子をオーバーロードするにはどうすればよいですか?

  15. 15

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

  16. 16

    C ++で演算子オーバーロードを使用してテンプレートを使用することは可能ですか?

  17. 17

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

  18. 18

    このコンテキスト内でプライベートですか?<<演算子をオーバーロードしようとしています

  19. 19

    複雑な演算子のオーバーロードとテンプレート

  20. 20

    テンプレート関数呼び出し演算子のオーバーロードへの参照を渡す

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

    C ++-演算子のオーバーロードを使用してconstテンプレートタイプとnon-constテンプレートタイプを比較することはできません

  25. 25

    オーバーロードされた演算子 '[]'の使用は、テンプレートキャスト演算子ではあいまいです

  26. 26

    フレンド関数を使用してテンプレートクラスの外部で演算子==をオーバーロードする方法は?

  27. 27

    ポインターと構築されていないテンプレートオブジェクトを取得する演算子をオーバーロードできますか?

  28. 28

    <<演算子がオーバーロードされた単純なテンプレートクラスが失敗し、「template-idの使用が無効です」

  29. 29

    ジェネリックテンプレートostream <<演算子のC ++あいまいなオーバーロード

ホットタグ

アーカイブ