我有一个delima。我正在为 native 类型使用包装类,但是,当使用包装类型作为函数参数时,char pointer 到 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 = 真; 并正确拒绝: VBool b = "字符串";
但是如何让编译器正确识别要调用的预期函数版本?
注意:我使用的是启用了 C++17 语言标准的 VCC 编译器。
最佳答案
添加另一个具有适当参数的函数。
inline void processVType(const char* vs) { processVType(VString(vs)); }
出于好奇,你为什么要尝试实现这样的东西?
关于C++ 编译器在使用 Bool 包装器类时报告不明确的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50049178/