我已经阅读了关于类成员的指针,但我从未见过它们被用于任何实际应用程序.有人可以解释一下这些指针的用例吗?是否真的有必要有这样的指针?
例如.
class abc
{
public:
int a;
abc(int val) { a = val; }
};
int main()
{
int abc::*data;
abc obj(5);
data = &abc::a;
cout << "Value of a is " << obj.*data << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面例如.为什么以这种方式访问"a"的值?使用指向类成员的指针有什么好处?
指向成员或指向成员函数的指针的最大优点是你
这可以用于例如回叫或抽象算法:
std::map<int,int> m;
m.insert(std::make_pair(1,2));
m.insert(std::make_pair(3,4));
m.insert(std::make_pair(5,6));
std::ptrdiff_t s =
std::count_if(m.begin(), m.end(),
boost::bind(&std::map<int,int>::value_type::first, _1) > 2);
std::cout << s << std::endl; // 2
Run Code Online (Sandbox Code Playgroud)
请注意,Boost.Bind,Boost.Function及其TR1等价物已经很好地为您封装了.在一定程度上目前的标准还包括类似的工具std::mem_fun在<functional>.