2014-10-30 95 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