我正在尝试将类A
转换为这样的字符串:
#include <iostream>
#include <string>
class A {
public:
std::string data_ = "hello world";
A() {}
operator std::string() const {
return data_;
}
template <typename T>
operator T() const {
return data_;
}
};
int main() {
A();
// This fails
// std::string s;
// s = A();
std::string s = A(); // This works
return 0;
}
我要解决的是s = A();
的部分。它在编译期间失败,并且编译器告诉我没有将A
分配给字符串的'='分配运算符。
有趣的是:
std::string s = A();
),“转换运算符”将启动并起作用(但我希望s = A()
也起作用)。 s = A();
也可以使用。有人可以解释是什么引发了不同的行为吗?
答案 0 :(得分:4)
解决方案很简单。使其显式而不是隐式转换:
template <typename T>
explicit operator T() const {
return data_;
}
现在的优势是,所有四种可能性都起作用:
std::string s;
s = A();
std::string s2 = A(); // This works
std::string s3 = std::string(A());
std::string s4;
s4 = std::string(A());