D Аналог указателей функций-членов в C ++, не обязательно делегатов

Я изучаю 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, ни то, ни другое из них может это сделать, поскольку указатели на функции могут быть объявлены только для глобальных функций, а делегаты должны быть привязаны к объекту, я не могу найти «частичного делегата». Как видно здесь, я не могу использовать делегат, поскольку нет единственного объекта, который можно было бы привязать к методу, который должен быть вызван.

Я знаю, что мог бы сделать это с помощью миксинов и, по сути, сделать это макросом. Однако это действительно не похоже на D, и я решил, что должен быть «Правильный путь»

7
задан Ramon Zarazua B. 8 November 2011 в 08:38
поделиться