将成员名称作为参数传递
Passing a member name as argument
我正试图将类的一个成员作为参数传递给函数(而不是成员方法)。我的意图的一个简单例子是这样的。
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
作为单个参数直接传递到函数中。
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 将成员函数指针作为参数传递给模板方法
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 移动类的成员作为常量引用参数传递
- C++将指向成员的指针作为模板参数传递
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 如何将成员函数作为参数传递?
- 使用 C++11 将指向成员函数的指针作为参数传递
- 是否可以将结构的成员变量作为参数传递
- 将参数传递给构造函数和成员函数时移动或复制
- 如何将已实现的虚拟成员函数作为参数传递
- 将派生类构造函数参数传递给受保护的成员
- 如何通过引用将参数传递给模板类的成员函数?
- 将参数传递给成员函数,就像使用 std::cout 一样
- 通过作为类的公共成员的两个函数将函数作为参数传递
- 使用可变模板参数传递成员函数指针是不明确的
- C++11通过推导的类型参数传递成员函数调用