レガシ コードをリファクタリングすると、次の関数 (疑似コード) に出会いました。
int getMessage( char * buffer, int size = 300 );
オーバーフローするのを待っているバッファを見てください。そこで、std::string を使用する関数を考え出し、関数のオーバーロードを使用するとよいと考えました。
int getMessage( std::string & buffer );
ここまでは順調ですね。しかし、文字列で関数を呼び出そうとすると:
std::string buffer;
int rc = getMessage( buffer );
次のエラーが表示されます。
cannot convert 'std::string' to 'char*' for argument '1' to 'int getMessage(char*, int)'
明らかに、コンパイラ (GCC 4.1.2) は std::string を char* に変換して最初の関数のパラメーター リスト (2 番目のパラメーターを満たすために既定値を使用) を満足させようとしますが、あきらめますが、2 番目のパラメーターは試行しません。関数...
この問題を回避するのに問題はありませんが、これが失敗する理由と、意図したとおりに機能させる方法があるかどうかを知りたいです。