2013-11-14 74 views
1

如何競爭數據成員的名稱(不是它們的值),從函數發送作爲參數。 示例代碼如下。如何比較類的數據成員的名稱不是它們的值

class Example 
{ 
    private: 
    std::string value; 

    public: 
    void Set(const std:: string& MemberName) 
    { 
     if(MemeberName == value) 
     { 
     std::cout<<"Same Member Name"; 
     } 
     else 
     { 
     std::cout<<"Not same Member name"; 
     } 
    } 
... 
} 

我這樣做,但沒有得到所需的結果。 Thansks的幫助

+0

你可以比較的地址,但爲什麼要這麼做? – LihO

+0

使用'string(「value」)'(假設您要查找的成員名稱是'value')。 C++並不真正提供反思。你需要知道你的成員名稱,並直接在你的C++源代碼中引用它們。成員名稱在運行時不可用作字符串。如果你想要這個連接,你必須自己構建它。 –

+0

我需要比較名稱,因爲在此之後,我必須將外部值設置爲相同的數據庫。 – user2696156

回答

2

應該

if(MemeberName == "value") 
{ 
    std::cout<<"Same Member Name"; 
} 
else 
{ 
    std::cout<<"Not same Member name"; 
} 
+0

謝謝,我得到了你的觀點 – user2696156

1

在你想找出它是否是完全相同的對象時,你可以使用的地址,在那裏它被存儲:

#include <iostream> 
using namespace std; 

std::string g; 

void foo(const std::string& arg) 
{ 
    if (&arg == &g)          // compares addresses 
     std::cout << "same object" << std::endl; 
    if (arg == g)           // compares values 
     std::cout << "same value" << std::endl; 
} 

int main() { 
    g = "abc"; 
    foo(g); 
    return 0; 
} 

注意,當您通過引用傳遞,您實際上正在使用同一個對象(不創建副本),因此當您使用&運算符時,您可以檢索原始對象的地址。本例打印same objectsame value

+2

我不認爲他們在做什麼。看起來他們更可能在做'object-> set(「foo」,「bar」)'希望將對象中的成員'foo'設置爲值'bar'。 –

+1

@JoeZ:它被問得很混亂。 – LihO

+1

是的。但是他們後來的澄清我想清楚地表明,他們想要做的更接近'arg == string(「g」)'在上面的示例的上下文中。 –

相關問題