我想知道是否有一种方法可以将字段名称传递给函数模板。请考虑以下事项:
struct Type1{
unsigned int Field1;
unsigned int Field2;
};
struct Type2{
unsigned int Field2;
unsigned int Field3;
};
template <typename TYPE>
bool MyFunction(TYPE _Type){
if(_Type.Field1==5)
return false;
}
这很好用,但是在 MyFunction
中我指定了 .Field1
,有没有一种方法可以将这个字段的名称传递到模板中,例如:
void TestFunction(){
Type1 mt1;
MyFunction(mt1, Field1);
}
很明显,我不是在这里模板化一个类型,而且我不知道它会被称为什么(除了明显的答案 - 愚蠢!)所以我什至正在努力寻找解决方案。
最佳答案
您不能传入纯名称,因为名称不是 C++ 元模型的一部分,但您可以将pointers-to-members 传递给您的函数:
template <typename TYPE, typename T>
bool MyFunction(TYPE obj, T TYPE::*mp)
// ^^^^^^^^^
{
if ((obj.*mp) == 5)
// ^^^^
return false;
// ... <== DON'T FORGET TO RETURN SOMETHING IN THIS CASE,
// OTHERWISE YOU WILL GET UNDEFINED BEHAVIOR
}
下面是如何在一个完整的小程序中使用它:
struct Type1{
unsigned int Field1;
unsigned int Field2;
};
struct Type2{
unsigned int Field2;
unsigned int Field3;
};
int main()
{
Type1 t1;
Type2 t2;
MyFunction(t1, &Type1::Field1);
MyFunction(t2, &Type2::Field3);
}
这是一个 live example .
关于c++ - 将字段名称传递到函数模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314497/