什么是用于类成员的指针?

sri*_*eak 7 c++ oop pointers

我已经阅读了关于类成员的指针,但我从未见过它们被用于任何实际应用程序.有人可以解释一下这些指针的用例吗?是否真的有必要有这样的指针?

例如.

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"的值?使用指向类成员的指针有什么好处?

Geo*_*che 9

指向成员或指向成员函数的指针的最大优点是你

  • 不必立即绑定到特定实例
  • 不需要对成员名称进行任何限制,只需要匹配类型.

这可以用于例如回叫或抽象算法:

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>.