将未知结构(在运行时)作为模板参数传递



我正在尝试创建一个通用模板函数,该函数将在运行时接受未知结构作为参数。未知结构,我的意思是我不了解结构成员变量名称及其相应的数据类型和值。然后,该函数应逐个推断所有结构成员的类型及其相应的值。我不关心结构成员计数,因为我可以让结构成员函数返回数字(硬编码(。我无法理解的是如何在运行时动态获取传入的结构成员类型及其相应的值。这是我到目前为止的代码:

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()之类的东西来获取它们的类型,但如何迭代所有(未知(成员,并获取它们的值。

提前感谢...

简短的回答:你不能。

长答案:您可以针对模板函数的特定实现。

到目前为止,你有一个良好的开端,但你还需要一件事。您需要为希望能够转换为字符串的特定结构定义structToString()函数。这样:

template <>
std::string structToString(const test1& st)     //Pass KNOWN struct as input
{
// Now you have access to struct test1's member data
}

现在,任何时候使用test1对象调用structToString(),它都会调用这个新方法,但任何其他未定义structToSting()方法的结构都将调用你的泛型方法。(然后您可以返回"[未知]"或类似内容(

最新更新