如何在c ++中传递std-functor并在不知道具体是哪一个的情况下使用它

时间:2011-01-05 15:16:01

标签: c++ stl virtual std functor

我在这里有类似排序算法的东西,我想传递一个函子,它提供了排序标准(std :: binary_function)。因此,如果给出了std :: less,它应该调用T.operator<()。

问题是,成员函数operator()不是虚拟的。所以我需要知道给出了哪种类型的对象,以执行一个不太好的动态转换。

此致

丹尼斯

3 个答案:

答案 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