我一直在学习 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();
}
根据我对D中的函数指针和委托的了解,它们都不能这样做,因为函数指针只能为全局函数声明,并且委托必须绑定到一个对象,没有“部分委托” “我能找到。如此处所示,我不能使用委托,因为没有单个对象可以绑定到要调用的方法。
我知道我可以用 mixins 来做到这一点,并且基本上使它成为一个宏。但是,这听起来确实不像 D,我认为应该有“正确的方法”