我有两个课程String
和Integer
我希望String
能够投放到Integer
和Integer
投放到String
。
我使用运算符重载实现它的方式如下(注意Integer
类是基于模板的)
#include <string>
class Integer; // forward declaration but doesnt fix the compiler error
class String {
public:
operator Integer() {
try {
return std::stoi(s);
catch(std::invalid_argument ex) {
}
}
std::wstring s;
};
template<class T>
class intTypeImpl {
T value;
public:
typedef T value_type;
intTypeImpl() :value() {}
intTypeImpl(T v) :value(v) {}
operator T() const {return value;}
operator String() {
return std::to_wstring(value);
}
};
typedef intTypeImpl<int> Integer;
编译器正在发布
错误C2027:使用未定义的类型&#39;整数&#39;
所以前瞻声明是没用的 我该如何实现呢?
非常感谢任何帮助。
答案 0 :(得分:2)
/* after every line of code you posted */
operator Integer(const String& str){
return std::stoi(str.s);
}
intTypeImpl
中投射c-tor:#include <type_traits>
/* in intTypeImpl */
intTypeImpl()=default;
intTypeImpl(const intTypeImpl<T>&)=default;
intTypeTmlp(String& str){
static_assert(
std::is_same<T, int>,
"String can be converted only to intTypeImpl<int>"
);
value=std::stoi(str.s);
}