我希望能够将myclass转换为任何基本结构(double,int,float等)。我用过:
template<class T> myclass::operator T() {
return (T)a;
};
但是运行它会给我一个错误。但是,如果我使用:
myclass::operator double() {
return (double)a;
};
(a是一个私有变量)代码有效。
在这种情况下如何使用模板?
谢谢
答案 0 :(得分:0)
要使其完全起作用,a
必须可转换为double
,int
和float
。然后,您的第一个示例应该可以正常工作。我通过static_assert
添加了额外的强制执行。
#include <type_traits>
class myclass {
double a = 1.0;
public:
template<class T> operator T() {
static_assert(std::is_convertible_v<decltype(a),T>);
return static_cast<T>(a);
};
};
int main() {
myclass m;
int i = m;
float f = m;
double d = m;
//std::string s = m; // BOOM!
}