std::function
具有模板参数:
template< class R, class... Args >
class function<R(Args...)>
我想知道R(Args...)
是什么类型,我认为它既不是函数指针 T
:
template<class R, typename... Args>
using T = R(*)(Args...);
也没有功能参考 Q
:
template<class R, typename... Args>
using Q = R(&)(Args...);
所以类型P
template<class R, typename... Args>
using P = R(Args...);
仅仅是一个功能。
我可以声明这样的函数并通过以下方式调用它:
int main(){
P<int,int> myFunc;
myFunc(3);
}
,由于从未定义myFunc
,因此不会编译。
如果正确,我在哪里可以在标准中找到有关此类型的功能的更多信息?
答案 0 :(得分:0)
正如您在 cppreference 上看到的,
template< class R, class... Args >
class function<R(Args...)>
只是 std::function 的原型,它接受一个参数包 Args
作为参数并返回类型为 R
的东西。
两个简单的例子
std::function<const int&()> F([]{ return 42; });
不接受任何参数并返回一个 const int &
。如果你声明:
void print_num(int i)
{
std::cout << i << '\n';
}
std::function<void(int)> f_display = print_num;
接受一个 int
并且什么都不返回。答案 1 :(得分:0)
正如您所指出的,该类型只是一个函数类型,它是 C++ 类型系统中定义良好的类型,在规范的第 3.9.2 节中定义:
<块引用>3.9.2 复合类型
<块引用>——函数,具有给定类型的参数并返回空或给定类型的引用或对象
程序:
template<class R, typename... Args>
using P = R(Args...);
int main(){
P<int,int> myFunc;
myFunc(3);
}
会编译就好了。它不会做的是link——你会得到像
这样的错误prog.cpp:6: undefined reference to `myFunc(int)'
因为您已经声明了一个函数(并调用了它),但从未定义过它。