我想获得功能,所以我可以这样做:
std::cout << "here's a message" << 5*"\n";
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
std::string operator* (int lhs, const char* rhs) {
std::string r = "";
for(int i = 0; i < lhs; i++) {
r += rhs;
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
error: ‘std::string operator*(int, const char*)’ must have an argument of class or enumerated type
Run Code Online (Sandbox Code Playgroud)
根据这篇SO帖子中的答案,"必须有一个类或枚举类型的参数"实际上意味着它几乎看起来我不能做这个时期.那是真的吗?如果没有,我该如何解决这个问题或安排解决方法?
我知道我可以做的是有rhs一个std::string,但随后的演习整点半放弃,因为5*std::string("\n")很笨重.
来自[over.oper]:
运算符函数应该是非静态成员函数,或者是非成员函数,其至少具有 一个类型为类的参数,对类的引用,枚举或对枚举的引用.
因此,您不能重载其参数都是内置的运算符.此外,为了operator*(int, std::string)找到它,它必须在,namespace std并且它是不正确的添加定义到该命名空间.
相反,您可以简单地提供一个小包装器:
struct Mult { int value; };
Run Code Online (Sandbox Code Playgroud)
并为它提供重载:
std::string operator*(const Mult&, const char* );
std::string operator*(const char*, const Mult& );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |