我有一个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)); }

出于好奇,您为什么要尝试执行类似的操作?

10-04 10:31