【发布时间】:2012-11-09 04:49:49
【问题描述】:
背景
如果第三方库有类似的代码
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;
}
那么就可以调用like了
ThirdPartyFunction(1, 1);
ThirdPartyFunction(1, std::string("Hello, World!"));
问题
是否可以扩展此库(无需修改第 3 方代码)以接受以下内容:
ThirdPartyFunction(1, "Hello, World!"); // const char* is not a string, implicit conversion fails
我想避免写
ThirdPartyFunction(1, std::string("Hello, World!"));
上面是简化的:在我的真实示例中,ThirdPartyFunction 是一个流操作符,ThirdPartyClass 是一个允许与流操作符交互的类型包装器。
【问题讨论】:
-
是的。编辑以使问题脱颖而出。