问题是,成员函数operator()不是虚拟的.所以我需要知道给出了哪种类型的对象,以执行一个不太好的动态转换.
你为什么要进行动态演员表演?通常你不需要那个.只需调用仿函数operator()
,就像调用普通函数一样.
仿函数的重点在于它们的行为与普通函数类似,并且您将模板参数传递给算法(不是吗?)来处理不同的仿函数(和函数)类型.
当然,这整个事情的前提是事实,你是实际上传递一个模板参数给你的函数.std::binary_function
是不适合作为虚拟基类.它仅用于定义一些方便的typedef.因此,您的函数声明应如下所示:
template <typename TBinaryFunction>
void your_algorithm(rest of parameters …, TBinaryFunction f);
Run Code Online (Sandbox Code Playgroud)