我在这里有类似排序算法的东西,我想传递一个函子,它提供了排序标准(std :: binary_function)。因此,如果给出了std :: less,它应该调用T.operator<()。
问题是,成员函数operator()不是虚拟的。所以我需要知道给出了哪种类型的对象,以执行一个不太好的动态转换。
此致
丹尼斯
答案 0 :(得分:6)
问题是,成员函数operator()不是虚拟的。所以我需要知道给出了哪种类型的对象,以执行一个不太好的动态转换。
为什么要进行动态演员表演?通常你不需要那个。只需调用仿函数operator()
,就像调用普通函数一样。
仿函数的重点在于它们的行为与普通函数类似,并且您将模板参数传递给算法(不是吗?)来处理不同的仿函数(和函数)类型。
当然,这一切都取决于你 实际上将模板参数传递给你的函数的事实。 std::binary_function
不适合作为虚拟基类。它仅用于定义一些方便的typedef。因此,您的函数声明应如下所示:
template <typename TBinaryFunction>
void your_algorithm(rest of parameters …, TBinaryFunction f);
答案 1 :(得分:1)
你不能把你的仿函数作为模板参数传递,所以要有静态多态吗?
答案 2 :(得分:0)
您可以使用Qt信号和插槽,也可以使用Boost.Function