有没有一种方法可以将字符串转换为自定义类,例如,如果我有一个名为Numb的类,但是我想使用=运算符将其声明为字符串,是否可以重载它?
class Numb{
std::string x;
};
int main(){
Numb n = "32";
//Creates a Numb and makes x = "32"
}
您想从字符串文字构造Numbs。字符串文字与类型不能区别字符串文字具有类型const char *
const char [N]
,我们可以通过编写一个接受函数来作为参数const char *
。
要定义具有这种行为的转换构造函数,只需编写一个类似于复制构造函数的签名,但不要期望使用相同类型的参数,而应该使用type类型的参数const char *
。它的签名看起来像Myclass(const char *);
另外,您可以从字符串复制或移动构造,但是需要这样做Numb n = std::string { "32" };
或类似操作才能将字符串常量转换为std :: string。
这是一些示例代码,其中main()返回3。在这里,我们还将演示如何处理该值:如果相反Num n2 = std::string { "TRAP" };
,则代码将返回1。如果这样做,Num n2 = std::string { "ANYTHING OTHER THAN TRAP" };
则返回2。
#include <string>
struct Num {
Num()
: _val(2) {}
Num(const std::string & str) {
if (str == "TRAP") {
_val = 1;
} else {
_val = 2;
}
}
Num(const char * s) {
_val = 3;
}
int _val;
};
int main(void) {
// Num n = std::string { "TRAP" }; // returns 1
// Num n = std::string { "NOTTRAP" }; // returns 2
Num n = "TRAP";
return n._val;
}
编辑:更正类型系统的错误,将字符串arg作为&而不是&&,简化示例,更新编译器资源管理器链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句