2016-10-24 8 views
-1

をオーバーロード、C++ typeidのクラスのメンバ演算子の()はgcc 4.8.2で次の手順を実行すると

class A 
{ 
public: 
    void operator()(int); 
    void operator()(const std::string&) {} 
}; 

std::cout << typeid(&A::operator()).name() << std::endl; 

それはエラーを与える:

error: address of overloaded function with no contextual type information. 

それはのような他のクラスのメンバ演算子、のために働きます演算子==。これは、A :: operator()のtypeid()呼び出しで構文上のエラーですか?

EDITS:申し訳ありませんが、私の悪い。この問題は、複数のオーバーロードされたoperator()がある場合に発生します。

+1

は、[私のために仕事]に思える(http://rextester.com/PFM1036) –

+1

は、GCC 6.2 –

+0

申し訳ありませんが、私の悪いで再現することはできません。質問を編集しました。複数のオーバーロードされたoperator()が定義されている場合に発生します。 – surfcode

答えて

2

static_castを使用して、過負荷から必要なものを取り出すことができます。

static_caststd::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));

例えばのように、特定のタイプの機能・ツー・ポインタ変換を行うことにより、関数オーバーロードを明確にするために使用することができます

std::cout << typeid(static_cast<void(A::*)(int)>(&A::operator())).name() << std::endl; 

LIVE

関連する問題