D模拟到C++成员函数指针,不一定是委托

Ram*_* B. 7 delegates d member-function-pointers generic-programming

我一直在学习D,特别是对它的通用编程能力感到非常兴奋.代表很精彩,显然他们已经完全取代了成员函数指针,所以当我想实现类似下面的内容时,我陷入了困境:

template <typename T>
void DispatchMethodForAll(std::vector<T*> & container, void (T::* func)(void))
{
  for(typename std::vector<T*>::iterator it = container.begin(); it != container.end(); ++it)
      (*it)->*func();
}
Run Code Online (Sandbox Code Playgroud)

根据我在D中学到的函数指针和委托,是不是它们都不能这样做,因为函数指针只能为全局函数声明,并且委托必须绑定到一个对象,没有"部分委托" "我能找到.如此处所示,我不能使用委托,因为没有单个对象可以绑定到要调用的方法.

我知道我可以用mixins来做,并且基本上使它成为一个宏.然而,这听起来确实不像D,我认为应该有"正确的方式"

ken*_*ytm 6

你仍然可以在这里使用代表.

void DispatchMethodForAll(T)(T*[] container, void delegate(T*) action)
{
    foreach (it; container)
        action(it);
}

...

DispatchMethodForAll(container, (Foo* foo) { foo.func(); });
Run Code Online (Sandbox Code Playgroud)

示例:http://www.ideone.com/9HUJa