【发布时间】:2011-01-05 15:16:01
【问题描述】:
我在这里有一个类似排序算法的东西,我想给它传递一个函子,它提供了排序标准(std::binary_function)。所以它应该调用 T.operator
问题是,成员函数 operator() 不是虚拟的。所以我需要知道给出了哪种类型的对象,以执行不太好的动态转换。
问候,
丹尼斯
【问题讨论】:
标签: c++ stl virtual std functor
我在这里有一个类似排序算法的东西,我想给它传递一个函子,它提供了排序标准(std::binary_function)。所以它应该调用 T.operator
问题是,成员函数 operator() 不是虚拟的。所以我需要知道给出了哪种类型的对象,以执行不太好的动态转换。
问候,
丹尼斯
【问题讨论】:
标签: c++ stl virtual std functor
问题是,成员函数 operator() 不是虚拟的。所以我需要知道给出了哪种类型的对象,以执行不太好的动态转换。
为什么要执行动态转换?通常你不需要那个。只需调用函子的operator(),就像调用普通函数一样。
仿函数的全部意义在于它们的行为类似于普通函数,并且您将模板参数传递给您的算法(不是吗?)以处理不同的仿函数(和函数)类型。
当然,这一切都基于您正在实际上将模板参数传递给您的函数这一事实。 std::binary_function 不适合作为虚拟基类。它的存在只是为了定义一些方便的 typedef。因此,您的函数声明应如下所示:
template <typename TBinaryFunction>
void your_algorithm(rest of parameters …, TBinaryFunction f);
【讨论】:
binary_function。正如我在回答中所说,它从来没有打算充当多态基类。它只是定义了一些有用的 typedef,仅此而已。您不能将binary_function 有意义地传递给另一个函数,这不应该工作。
myCode 的示例函数,它将函子(他们称之为“functionoid”)作为模板参数。
你不能将你的仿函数作为模板参数传递,以便拥有静态多态吗?
【讨论】:
你可以使用 Qt Signal and Slots 或者你可以使用 Boost.Function
【讨论】: