C ++で多重継承のあいまいさを解決する方法

レナート・ロランド

私は次のような小さなプログラムを持っています:

#include <iostream>

template <typename T>
class X{
    public:
        bool something(){
            return true;
        }
};

class A: public X<A>{
};


class B: public A, public X<B>{
};


template <typename T>
bool use(T &t)
{
    return t.something();
}



int main()
{
    B b;
    std::cout << "use returned: " << use(b);
}

の2つの可能なバージョンのsomething()どちらを選択する必要があるかについてあいまいさがあるため、これはコンパイルされません。

In instantiation of 'bool use(T&) [with T = B]':
30:43:   required from here
22:20: error: request for member 'something' is ambiguous
6:14: note: candidates are: bool X<T>::something() [with T = B]
6:14: note:                 bool X<T>::something() [with T = A]
 In function 'bool use(T&) [with T = B]':
23:1: warning: control reaches end of non-void function [-Wreturn-type]

私の質問は、編集できる場所が本体だけである場合、このあいまいさをどのように解決できるかということuse()です。

vitaut

はい。たとえば、somethinggodboltへの呼び出しを修飾できます

template <typename T>
bool use(T &t)
{
    return t.A::something();
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

LOKI C ++:「ScatterHierarchyTag」は継承のあいまいさをどのように解決しますか?

分類Dev

C ++多重継承静的関数呼び出しのあいまいさ

分類Dev

C ++で多重継承を回避する必要があるのはなぜですか?

分類Dev

JavaまたはC#で多重継承が許可されないのはなぜですか?

分類Dev

C ++の多重継承に関するいくつかの基本

分類Dev

C ++テンプレートサブクラスと多重継承のあいまいさ

分類Dev

C#での継承は、「抽象、外部、または部分としてマークされていないため、本文を宣言する必要があります」

分類Dev

C ++の他の抽象クラスから複数継承されている抽象クラスの実装を作成する方法はありますか?

分類Dev

多重継承はC#ではサポートされていないので、どうすればこれを機能させることができますか?

分類Dev

参照は多重継承のあいまいさをどのように解決しますか?

分類Dev

あいまいなエラー:C ++ 11は可変個引数テンプレートの多重継承を使用します

分類Dev

C ++での継承、「...は...のあいまいなベースです」エラー

分類Dev

C ++-ダイヤモンド継承のこの構造があいまいさを引き起こさないのはなぜですか?

分類Dev

C#リフレクションにおけるジェネリックメソッドのあいまいさを解決する方法

分類Dev

C#での多重継承

分類Dev

C#での多重継承

分類Dev

Cでの多重継承

分類Dev

C ++の多重継承で使用されるreinterpret_cast

分類Dev

C ++の多重継承-同じメソッド名-どういうわけかそれらの1つを削除できますか?

分類Dev

C#での継承を理解するのが難しいと感じています

分類Dev

あいまいな列挙値はC#でどのように解決されますか?

分類Dev

異なるパラメーターを持つ継承されたメンバーがある場合、C ++構造体の関数の呼び出しがあいまいになるのはなぜですか?

分類Dev

C ++:typedefを置き換えると、あいまいなオーバーロードを解決できます

分類Dev

Appleclangと継承された比較演算子によるC ++ 20演算子のあいまいさ

分類Dev

多重継承によるC ++コンストラクターの過負荷解決

分類Dev

スコープ解決を使用して、多重継承によって引き起こされるあいまいさを回避します

分類Dev

c++ - 継承のある宣言されていない識別子 (演算子 ostream)

分類Dev

C ++での継承を理解する

分類Dev

GoでC構造体を動的に解決する方法はありますか?

Related 関連記事

  1. 1

    LOKI C ++:「ScatterHierarchyTag」は継承のあいまいさをどのように解決しますか?

  2. 2

    C ++多重継承静的関数呼び出しのあいまいさ

  3. 3

    C ++で多重継承を回避する必要があるのはなぜですか?

  4. 4

    JavaまたはC#で多重継承が許可されないのはなぜですか?

  5. 5

    C ++の多重継承に関するいくつかの基本

  6. 6

    C ++テンプレートサブクラスと多重継承のあいまいさ

  7. 7

    C#での継承は、「抽象、外部、または部分としてマークされていないため、本文を宣言する必要があります」

  8. 8

    C ++の他の抽象クラスから複数継承されている抽象クラスの実装を作成する方法はありますか?

  9. 9

    多重継承はC#ではサポートされていないので、どうすればこれを機能させることができますか?

  10. 10

    参照は多重継承のあいまいさをどのように解決しますか?

  11. 11

    あいまいなエラー:C ++ 11は可変個引数テンプレートの多重継承を使用します

  12. 12

    C ++での継承、「...は...のあいまいなベースです」エラー

  13. 13

    C ++-ダイヤモンド継承のこの構造があいまいさを引き起こさないのはなぜですか?

  14. 14

    C#リフレクションにおけるジェネリックメソッドのあいまいさを解決する方法

  15. 15

    C#での多重継承

  16. 16

    C#での多重継承

  17. 17

    Cでの多重継承

  18. 18

    C ++の多重継承で使用されるreinterpret_cast

  19. 19

    C ++の多重継承-同じメソッド名-どういうわけかそれらの1つを削除できますか?

  20. 20

    C#での継承を理解するのが難しいと感じています

  21. 21

    あいまいな列挙値はC#でどのように解決されますか?

  22. 22

    異なるパラメーターを持つ継承されたメンバーがある場合、C ++構造体の関数の呼び出しがあいまいになるのはなぜですか?

  23. 23

    C ++:typedefを置き換えると、あいまいなオーバーロードを解決できます

  24. 24

    Appleclangと継承された比較演算子によるC ++ 20演算子のあいまいさ

  25. 25

    多重継承によるC ++コンストラクターの過負荷解決

  26. 26

    スコープ解決を使用して、多重継承によって引き起こされるあいまいさを回避します

  27. 27

    c++ - 継承のある宣言されていない識別子 (演算子 ostream)

  28. 28

    C ++での継承を理解する

  29. 29

    GoでC構造体を動的に解決する方法はありますか?

ホットタグ

アーカイブ