gpt4 book ai didi

delegates - D 类似于 C++ 成员函数指针,不一定是委托(delegate)

转载 作者:行者123 更新时间:2023-12-02 08:02:28 24 4
gpt4 key购买 nike

我一直在学习 D,尤其对它的通用编程功能感到非常兴奋。委托(delegate)非常棒,显然它们已经完全取代了成员函数指针,所以当我想实现如下所示的东西时我陷入了困境:

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中函数指针和委托(delegate)的了解,它们都不能做到这一点,因为函数指针只能声明为全局函数,而委托(delegate)必须绑定(bind)到一个对象,所以没有我能找到的“部分委托(delegate)”。如此处所示,我无法使用委托(delegate),因为没有可以绑定(bind)到要调用的方法的单个对象。

我知道我可以使用mixins来做到这一点,并且本质上使它成为一个宏。然而,这听起来确实不像 D,我认为应该有“正确的方法”

最佳答案

您仍然可以在此处使用委托(delegate)。

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

...

DispatchMethodForAll(container, (Foo* foo) { foo.func(); });

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

关于delegates - D 类似于 C++ 成员函数指针,不一定是委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8047776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com