バックグラウンド
サードパーティのライブラリに次のようなコードがある場合
class ThirdPartyClass
{
public:
int value;
ThirdPartyClass(int i) : value(i) {}
ThirdPartyClass(const std::string& s) : value(0) {}
};
bool ThirdPartyFunction(int a, const ThirdPartyClass obj)
{
return a == obj.value;
}
その後、次のように呼び出すことができます
ThirdPartyFunction(1, 1);
ThirdPartyFunction(1, std::string("Hello, World!"));
質問
このライブラリを (サードパーティのコードを変更せずに) 拡張して、次のようなものを受け入れることは可能ですか?
ThirdPartyFunction(1, "Hello, World!"); // const char* is not a string, implicit conversion fails
書く必要は避けたい
ThirdPartyFunction(1, std::string("Hello, World!"));
上記は単純化されています。私の実際の例ThirdPartyFunction
では、ストリーム オペレーターでありThirdPartyClass
、ストリーム マニピュレーターとの対話を可能にする型ラッパーです。