我试图将类的成员作为参数传递给函数(而不是成员方法)。我意图的简单例子就是这样。
template <typename ObjType>
void myOutput(ObjType* obj, ????)
{
std::cout << obj->???? << std::endl;
}
struct A
{
int a;
};
struct B
{
std::string b;
};
int main()
{
A A1;
B B1;
A1.a = 1;
B1.b = "something";
myOutput(&A1, A1::a);
myOutput(&B1, B1::b);
return 0;
}
所以我的问题是我应该替换“ ????”吗?和?我没有使用C ++ 11。
谢谢。
编辑:
为了澄清我的意图。函数myOutput并不真正知道我的成员的名称,我也不想使用诸如memberToString()之类的函数。
因此,第一次调用的输出应如下所示。
void myOutput(A* obj, ????)
{
std::cout << obj->a << std::endl;
}
第二
void myOutput(B* obj, ????)
{
std::cout << obj->b << std::endl;
}
如果在编译时知道成员名称,则可以使用成员指针来引用该成员。
template <typename ObjType, typename MembType>
void myOutput(ObjType* obj, MembType memb)
{
std::cout << obj->*memb << std::endl;
}
然后可以这样称呼:
myOutput(&A1, &A::a);
myOutput(&B1, &B::b);
自然地,您应该问自己为什么要这样做,以及是否不可能简单地将其作为单个参数直接传递A1->a
或B1->b
直接传递给函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句