所以我想知道我是否可以在C ++中执行以下操作。
#include <string>
using namespace std;
class foo
{
public:
string bar;
string baz;
foo(const string &faz)
:bar(faz)
{
};
};
int main()
{
const foo foo1("somestring");
bool isTrue = ((std::string(foo1) == "some string");//This should be true
return 0;
}
如何使std::string(foo1)
等于"some string"
?我需要使用一些特殊的变量名吗?或者还有其他我需要做的事情吗?如果你知道,请告诉我
答案 0 :(得分:2)
你基本上有两个选择:
foo
可以隐式转换为string
operator==
定义foo
。第一个选项起初可能看起来很有吸引力,但是使用转换运算符的代码很快就会失控 - 重载分辨率非常棘手,因为它没有添加更多可能的路径。
operator==
版本非常简单(请注意,通过使其成为非成员,您允许char数组显示在==
的左侧):
bool operator==( foo const &f1, foo const &f2 )
{
return f1.bar == f2.bar;
}
您可以使用它:
bool isTrue = (foo1 == "some string");
这与char数组匹配,因为foo
具有转换构造函数,而隐式转换链char[]
- &gt; char *
- &gt; const std::string &
发生了。