C++指向非静态方法的有用性

teo*_*ron 1 c++ design-patterns idioms

正如我理解非静态方法的指针,它们对于为某种方法提供别名机制没有用处.例如,拥有一个具有三种方法的对象

 class Provider
 {
 public:
 int A(int in);
 int B(int in);
 int C(int in);
 }
Run Code Online (Sandbox Code Playgroud)

和需要指向提供者方法指针的消费者(无论是A,B还是C).有一个控制器向所谓的消费者提供指向3种方法之一的指针,我们可以在使用Provider实例的消费者代码中编写一些东西,并指向A,B或C,这取决于控制器发送的内容.

如果这是C++中非静态方法的指针所能做到的,是否还有一种方法可以为对象的方法提供更"智能"的指针,而无需将对象与该方法指针一起发送给消费者?在肯定的情况下,所谓的成语/机制是什么(甚至一种模拟这种方式的资格作为我感兴趣的答案).

Lol*_*4t0 6

您的成员函数指针的概念通常是正确的.

成员函数指针实际上非常有用于与这些帮助程序的连接,as std::bindstd::function.原始成员函数指针通常很难看.

至于你的例子,

您的消费者可以接受std::function<return_type(args)>,您可以将对象及其成员函数的绑定传递给此类使用者.

这样的结构std::bind也允许实现部分专业化和currying等概念.