2016-05-11 65 views
1

我想知道如何編寫C++函數來打印泛型結構的屬性。例如,C++函數輸出泛型結構

struct a { 
std::string field_1; 
std::string field_2; 
std::string field_3; 
}; 


struct b { 
int a; 
int b; 
int c; 
}; 

該函數將形式爲'a'或'b'的結構作爲輸入並生成輸出。也許可以使用一個模板 - 如果可以的話,如何構建它?

回答

2

這在標準C++中是不可能的,它不會以這種方式工作。 C++ does not have reflection

+0

這在Java中不會太難。驚訝這是不可能的C++ –

+0

@KAlistair事實上,但Java和C++實際上是非常不同的 – vu1p3n0x

+0

Java是一種託管語言。 C++不是。託管語言與本機編譯語言(如C++)有本質的區別。 –

0

有兩種可能的解決了反射在C失蹤++的支持。

第一個是使用std :: tuple來代替它並遍歷它。這可以通過反射顯式完成,或者很好地包裝在boost :: fusion中。

用C++ 14的第二個可能性是boost :: hana。在boost :: hana中有結構體,可以迭代。這是在預處理器宏的幫助下完成的。

如果你還有興趣,我可以在這裏發表一個簡單的例子。