C++で
void foo(int i)
{ std::cout<<"int"<<std::endl; }
void foo(float i)
{ std::cout<<"float"<<std::endl; }
void foo(void *i)
{ std::cout<<"void *"<<std::endl; }
void foo(bool b)
{ std::cout<<"bool"<<std::endl; }
void main() { foo(0); }
これをコンパイルすると、エラーが発生します。
visual-studio 2008では、エラーはC2668です:'function':オーバーロードされた関数へのあいまいな呼び出し
私はこの問題が発生する理由を知っており、時間を使用する型キャストの解決策を知っています。しかし、この方法を使用すると関数のオーバーロードの字句性が失われるため、これは適切な解決策ではないと思います。
私のプロジェクトでは、自動型をint、float、std::basic_stringおよび関数ポインターに変更する字句オブジェクトを作成しています。すべての型キャスト演算子と作成者をオーバーロードします。しかし、「NULL」を入力すると、エラーC2668が発生します。
実際、ほとんど問題ありません。唯一の深刻な問題は、FALSEを使用する場合です。私のプロジェクトはコアライブラリであるため、すべてのエンドクライアントプログラマーをガイドすることはできません。
この問題をより賢く解決するための秘訣やヒントを誰が知っていますか?