最近、メソッドのオーバーロードが導入されたため、アプリケーションが失敗し始めました。最後にそれを追跡すると、新しいメソッドが予想外の場所で呼び出されています。
我々は持っていた
setValue( const std::wstring& name, const std::wstring& value );
std::wstring avalue( func() );
setValue( L"string", avalue );
std::wstring bvalue( func2() ? L"true", L"false" );
setValue( L"bool", bvalue );
setValue( L"empty", L"" );
bool 値が格納されるときに同じ文字列を使用するように変更されました (文字列の内部データ ストレージ)。
setValue( const std::wstring& name, const std::wstring& value );
setValue( const std::wstring& name, const bool& value );
std::wstring avalue( func() );
setValue( L"string", avalue );
setValue( L"bool", func2() );
setValue( L"empty", L"" ); << --- this FAILS!?!
L"" の問題は、それが暗黙的にキャストされることであり、以前は std::wstring であることを喜んでいましたが、bool であることは好まれませんでした。MSVC コンパイラは文句を言ったり、警告を発したりしないので、setValue( L"empty", L"" ); することが
setValue( L"empty", std::wstring() );
他の誰かが後で来て、単に setValue( L"empty", L"" ); を使用する可能性があります。この問題をもう一度追跡する必要があります。
メソッドで明示的に使用することを考えましたが、この使用法では有効なキーワードではありません。コンパイラにこれについて不平を言う、または問題を防ぐ方法はありますか? それ以外の場合は、bool を取るメソッドの名前を変更して、間違った推測ができないようにすることを考えています。