C++ 编译器在使用 Bool 包装器类时报告不明确的函数调用

标签 c++ boolean wrapper implicit-conversion ambiguous

我有一个delima。我正在为 native 类型使用包装类,但是,当使用包装类型作为函数参数时,char pointerbool 的隐式转换一直导致编译器发出不明确的函数调用错误:

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/

相关文章:

c++ - Boost SSL-Server 因 SSLv3 错误而失败

c++ - 为什么在 Visual Studio 中满足我的断点条件时却没有满足我的断点条件?

java - 包装对象

c++ - 为什么这种与 bool 的比较对于 istream 不起作用?

json - 如何将对象转换为 Jooq JSON

c - 将 Objective-C 类包装在 C 结构中以镜像类名

c++ - 如何实现两个类自动判定深拷贝和浅拷贝?

c++ - Directx:Obj文件解析到Index Buffer

python - 使用 Python 中的 format() 方法打印 boolean 值 True/False

android - 任何 View 的 R.id(最小和最大整数值)的范围是多少