2014-10-30 94 views
-1

所以我想知道我是否可以在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

那么你可以添加一个转换操作符,但是这些操作符通常会被转换为实际有用的特定情况。 – 2014-10-30 00:15:06

+0

@CaptainObvlious我认为这是用于'struct's?你能指定答案中的含义吗?请忍受我,我是一个新手。 – 2014-10-30 00:19:50

+0

'operator string()const {return BLAH; }' – 2014-10-30 00:23:05

回答

2

你基本上有两种选择:

  1. 添加一个转换操作符,这样一个foo可以隐式转换为string
  2. 定义为operator==foo

第一个选项起初看起来很有吸引力,但使用转换运算符的代码可能会很快失控 - 重载分辨率足够复杂,因为它不会增加更多可能的路径。

operator==的版本是很简单的(注意,通过使非会员,你允许的字符数组出现在==左):

bool operator==(foo const &f1, foo const &f2) 
{ 
    return f1.bar == f2.bar; 
} 

你会使用它,如:

bool isTrue = (foo1 == "some string"); 

这个匹配字符数组因为foo具有转换构造,以及char[]的隐式转换链 - >char * - >const std::string &发生。

+0

假设他想通过酒吧成员进行比较。实际上没有说明如何进行比较。 – 2014-10-30 00:33:06

+0

我不认为使用转换操作符会失控。我只用它来返回我的对象​​的单个成员字符串。另外,在我的实际代码中,我需要使用'BOOST_REQUIRE_EQUAL(“some string”,std :: string(foo1));'所以我不能使用'operator =='版本。 – 2014-10-30 00:37:51