我有一个delima。我将包装器类用于本机类型,但是,当将包装器类型用作函数参数时,char指针到bool的隐式转换会导致编译器发出模糊的函数调用错误:
class VBool
{
public:
VBool(bool b):value(b){}
template<class T>
VBool(T)=delete;
private:
bool value;
};
class VString
{
public:
VString(const char* str):value(str){}
private:
std::string value;
};
void processVType(VBool vb){}
void processVType(VString vs){}
int main()
{
processVType(""); // rejected as ambiguous by compiler.
return 0;
}
现在,编译器允许:
VBool b = true;
并正确拒绝:
VBool b =“字符串”;
但是,如何使编译器正确识别要调用的预期函数版本?
注意:我使用的VCC编译器已启用C++ 17的语言标准。
最佳答案
使用适当的参数添加另一个功能。
inline void processVType(const char* vs) { processVType(VString(vs)); }
出于好奇,您为什么要尝试执行类似的操作?