2

type_traitsヘッダーのis_member_pointerを次の構文で使用しようとしています。例:

cout << is_member_pointer<decltype(&vector<int>::member)>::value;

ベクトルの場合、クリアを除くすべてのイテレータ関数とすべての修飾子関数に対して、「テンプレート引数が無効です」というメッセージと「...のタイプが不明です」というメッセージが表示されます。他のコンテナ機能にも同様の障害があります。私はmingwg++4.6.2を持っています。

これを助ける方法はありますか?

4

1 に答える 1

5

おそらく問題は、オーバーロードされたメソッドのタイプをチェックしたことです。のような式&std::vector<int>::beginには型がないため、これは不可能です (2 つのオーバーロードがあります)。メンバー関数ポインターになるのは、目的の型にキャストした後でのみです。キャストは次のようになります。

std::cout << std::is_member_pointer<decltype((std::vector<int>::iterator(std::vector<int>::*)())&std::vector<int>::begin)>::value;

審美的にあまり好ましいものではありません。

オーバーロードされていないメソッドでは、機能します。

std::cout << std::is_member_pointer<decltype(&std::vector<int>::reserve)>::value;

ところで、gcc-4.7 では、より明確なエラー メッセージが表示されます。

test.cpp:6:70: error: decltype cannot resolve address of overloaded function
于 2012-06-28T19:56:43.233 に答える