私は D を学んでおり、特に 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 のようには聞こえず、「正しい方法」があるべきだと考えました。