実行時に未知の構造をパラメーターとして受け入れる汎用テンプレート関数を作成しようとしています。不明な構造体とは、構造体メンバーの変数名とそれに対応するデータ型および値についての知識がないことを意味します。次に、関数は、すべての構造体メンバーのタイプとそれに対応する値を1つずつ推測する必要があります。構造体メンバー関数で数値を返す(ハードコードされている)ことができるので、構造体メンバーの数は気にしません。私が理解できないのは、実行時に、着信構造体のメンバータイプとそれに対応する値を動的に取得する方法です。これが今までの私のコードです:
struct test1 //Any struct of this type will be passed as a parameter to the template function, with more or less the same data types
{
int n1;
double d1;
std::string s1;
double d2;
std::string s2;
int sCount() { return 5; } //Hardcoded
};
template <class T>
std::string structToString(const T& st) //Pass unknown struct as input
{
//I am not able to understand how to get all the structure members, one by one, and their types and values at run time
}
int main()
{
test1 obj = { 0 };
obj.n1 = 10;
obj.d1 = 12.23;
obj.s1 = "XYZ1";
obj.d2 = 13.65;
obj.s2 = "ABC1";
structToString<test1>(obj);
return 0;
}
おそらくtypeid(T).name()
、各structメンバーのようなものを使用してタイプを取得できますが、すべての(不明な)メンバーを反復処理し、それらの値を取得する方法もあります。
前もって感謝します...
簡単な答え:できません。
長い答え:テンプレート関数の特定の実装のためにできます。
これまでのところ良いスタートですが、もう1つ必要です。structToString()
文字列に変換できるようにする特定の構造体の関数を定義する必要があります。そのようです:
template <>
std::string structToString(const test1& st) //Pass KNOWN struct as input
{
// Now you have access to struct test1's member data
}
これstructToString()
で、test1
オブジェクトを使用して呼び出すたびに、この新しいstructToSting()
メソッドが呼び出されますが、メソッドを定義しない他の構造体は、汎用メソッドを呼び出します。(その後、「[不明]」などを返すことができます)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加