Follwing短程序将与VS 2013完美搭配并达到标记点。但是在XCode中,编译器会因为模糊的构造函数而显示错误。如何解决?
#include <iostream>
#include <string>
class atest
{
public:
explicit operator const char *()
{
return "";
}
template<class T> operator T()
{
}
operator std::string()
{
return std::string("Huhuhu");
}
template<class T> atest &operator =(T value)
{
}
atest &operator =(const std::string &value)
{
return *this; // I want to reach this point
}
};
int main(int argc, char* argv[])
{
atest tst;
// auto a = (std::string)tst;
std::string astr;
// do some stuff
astr=tst; // I wanna keep this line
return 0;
}
Clang无法区分VS2013采用正确结构的不同构造函数。我现在搜索一种排除赋值运算符的“const char *”模板的方法。
答案 0 :(得分:1)
std::string
有多个constructors采用单个参数,因为您为std::string
和提供了转换运算符,这是一个通用的任意类型转换运算符,编译器根本不知道要选择哪个构造函数。
答案 1 :(得分:0)
我认为你写了太多的重载函数。您需要的唯一功能是:
operator std::string()
{
return std::string("Huhuhu");
}
评论休息全部,你的代码就可以了。