阅读“C ++模板:完整指南”第22.5.3节
我对作者用于函数指针的语法感到困惑。我相信这种语法称为“函数调用语法”?我觉得我在这里错过了一些东西..?我评论了相关代码部分。
template<typename F>
void my_sort(.., F cmp = F())
{
..
if (cmp(x,y)) {..}
..
}
//*** WHAT IS THIS SYNTAX? ***
bool my_criterion()(T const& x, T const& y);
// call function with function pointer passed as value argument
my_sort(..., my_criterion);
我用适当的值替换了所有..并将my替换为my_criterion()中的int,但它仍然无法编译。
他首先提到这种语法是它之前的部分:
“正如所写,这种仿函数规范技术的优点是它也可以将普通函数指针作为参数传递。例如:
bool my_criterion () (T const& x, T const& y);
我正在尝试编写的代码基于本书的摘录:
template<typename F>
void mySort(F cmp)
{
std::cout << "mySort(F cmp)" << std::endl;
}
bool myCriterion()(int x, int y);
*错误C2091:函数返回函数(指myCriterion)
答案 0 :(得分:1)
我的C ++有点生疏,但谷歌搜索引起了这种情况:The Function Pointer Tutorials
答案 1 :(得分:1)
我猜这本书中的拼写错误。从书中引用:
正如所写,这种仿函数规范技术的优点是它也可以传递普通函数 指针作为参数。例如:
bool my_criterion () (T const& x, T const& y);
// call function with function object
my_sort (… , my_criterion);
作者显然试图宣布和“普通功能”。函数名后面的括号不应该在那里。
答案 2 :(得分:0)
我想你缺少的是一个名为Functor的课程:
这是一个小例子。
#include <iostream>
#include <string>
#include <sstream>
struct foobar {
void operator()(int x, int y) {
std::cout << x << y << std::endl;
}
};
int main () {
foobar()(10,20);
return 0;
}