2016-05-11 13 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++のようなネイティブにコンパイルされた言語とは根本的に異なります。 –

1

これは現時点では不可能ですが、スタティックリフレクションを使用してC++で利用できる可能性があります。

Compile-time reflection in C++1z?

0

参照のC++での反射のために不足している支援を回避するには、2つの可能性があります。

最初にstd :: tupleを使用し、それを反復処理します。これは明示的にリフレクションするか、boost :: fusionできちんとラップして行うことができます。

C++ 14の2番目のposibillityはboost :: hanaです。 boost :: hanaには構造体があり、それを繰り返し処理できます。これは、プリプロセッサマクロの助けを借りて行われます。

まだ興味がある場合は、ここに最小限の例を掲載することができます。

関連する問題