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

1 c++ virtual stl std functor

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

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

问候,

丹尼斯

Kon*_*lph 6

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

你为什么要进行动态演员表演?通常你不需要那个.只需调用仿函数operator(),就像调用普通函数一样.

仿函数的重点在于它们的行为与普通函数类似,并且您将模板参数传递给算法(不是吗?)来处理不同的仿函数(和函数)类型.

当然,这整个事情的前提是事实,你实际上传递一个模板参数给你的函数.std::binary_function适合作为虚拟基类.它仅用于定义一些方便的typedef.因此,您的函数声明应如下所示:

template <typename TBinaryFunction>
void your_algorithm(rest of parameters …, TBinaryFunction f);
Run Code Online (Sandbox Code Playgroud)

  • @Dennis:那你就是在滥用`binary_function`.正如我在回答中所说的那样,从来没有打算充当多态基类.它只定义了一些有用的typedef,仅此而已.你不能有意义地将`binary_function`传递给另一个函数,这不应该工作. (2认同)