【问题标题】:int(int, int) style template function type syntaxint(int, int) 样式模板函数类型语法
【发布时间】:2011-08-11 14:46:19
【问题描述】:
我记得在使用 Boost.Spirit 和 C++0x 的 std::function 添加时,您使用不使用指针的语法来指定函数类型,例如定义 std::function<bool(int)> fn,而您会投射像(bool(*)(int))fn 这样的指针。
谁能告诉我这个新语法的名称或对此的任何引用,或者如何使用它?这似乎是一种适用于仿函数的多态函数类型语法,但我真的不知道如何使用它。
【问题讨论】:
标签:
c++
templates
function
syntax
function-pointers
【解决方案1】:
bool(int)是函数的类型; bool(*)(int) 是函数指针的类型。换句话说,如果你定义
typedef bool(BF)(int);
typedef bool(pBF*)(int);
那么BF* 与pBF 相同。
std::function 模板通过(可变参数)模板捕获返回和参数类型:
template <typename R, typename ...Args> struct function
{
function(R(&f)(Args...)); // conceptually
}
【解决方案2】:
这不是新的语法,尽管旧的编译器有时会拒绝它。它只是函数类型与函数指针类型的比较,类似于数组类型与指向数组的指针的比较。
没有函数左值和函数右值迅速衰减为指向函数的指针的事实使它们几乎无用。当然,模板除外。