我想写一个函数,它接受一个对象的向量和一个属性的名称。然后它会根据对象的属性值进行一些操作。最后会返回一个对象。
例如
class A{
Point center;
int length;
...
...
};
class B{
Point position;
bool value;
...
...
};
现在如果我们将函数传递给A类型的向量,它应该根据center的值来操作对象;如果我们将函数传递给B类型的向量,它应该根据位置值来操作对象。
functiona(vector<T>,string property)
在函数内部如何根据传递的字符串属性访问属性?
编辑:第二个属性是字符串只是为了说明;我不在乎它是什么类型
答案 0 :(得分:1)
是的,可以使用指向成员的指针来完成。使用示例:
#include <iostream>
#include <vector>
using namespace std;
class A {
public:
int a;
A(int x):a(x){}
};
class B {
public:
int b;
B(int x):b(x){}
};
template <typename T> int func(vector<T> data, int T::*pointer) {
int total = 0;
for (unsigned i = 0; i < data.size(); ++i) {
total += data[i].*pointer;
}
return total;
}
int main() {
vector<A> vec1;
vec1.push_back(A(123));
vec1.push_back(A(456));
vec1.push_back(A(789));
vector<B> vec2;
vec2.push_back(B(666));
vec2.push_back(B(666));
vec2.push_back(B(666));
cout << func(vec1, &A::a) << endl;
cout << func(vec2, &B::b) << endl;
return 0;
}
您声明指向成员的指针:valueType class::*pointerName
,读取地址:&class::field
并使用它们:object.*pointerToMember
或pointerToObject->*pointerToMember
。