为什么std::function的模板参数不是一个类型? 5C

最近看到了std::function 的用法,一直弄不明白:
std::function<returnType(ArgType...)>
用typedef 测试了一下returnType(ArgType)根本不被认为是一个类型,为什么可以做模板参数呢??
直接上代码

#include<iostream>
bool fooa(int,int){
    std::cout<<"called fooa"<<std::endl;
    return true;
};
bool foob(int,int){
    std::cout<<"called foob"<<std::endl;
    return true;
}
typedef  bool(int,int)  afunc;//报错
int main(){
    std::function<bool(int,int)>  b;//由上面的报错可以知道bool(int,int)不被判断为类型
    b=foob;//这句没问题
    afunc a=fooa;//
    a();
    b();
    return 0;
}

上面的typedef bool(int,int) afunc已经报错了,说明bool(int,int)不是个类型为什么可以拿它做模板参数呢?

c++

2个回答

std::function<returnType(ArgType...)>
这是不确定个数的参数的一个函数的指针
zdi1997
ImGoose 谢谢你的回答,可是函数指针不应该用typedef retrunType (*typeName)(ArgType);这样定义吗?
大约 2 个月之前 回复

ArgType...,尤其是"..."是不定参数的标准写法,可以了解一下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

0
std::list使用std::set_union 进行求并集,编译运行后得到的结果是 std::list::size()值很大
0
不能将参数 1 从“char”转换为“const std::basic_string<_Elem,_Traits,_Ax> &” 如何解决?
1
std::thread 绑定函数出错
3
我自己简单写了一个cout,但是在out<<std::endl的时候出错了,要怎么改啊
2
指针类型的vector内部的vector需要手动释放吗?
1
std::unique_lock里两个疑问
2
C++ 为什么会调用拷贝构造函数而不是拷贝赋值运算符?
1
error: passing ‘const HasPtr’as‘this’argument of‘HasPtr& HasPtr::operator=(const HasPtr&)’discards qualifiers [-fpermissive]
2
c++文件报错:错误(活动) E1776 无法引用 函数 "std::basic_ifstream<_Elem, _Traits>::basic_ifstream(const std::basic_ifstream<_Elem, _Traits> &)
2
qt std::thread线程如何发送一个信号调用主线程的一个函数
1
C++ 在回调里面调用线程停止函数会崩溃?
1
为什么我看了这个关于高校人员信息管理系统设计的代码运行时总是会说找不到“common.h”这个文件,这个那里有错误呢?
1
QT使用std::unordered_map时报错:the code model could not parse an included file, which might lead to incorrect code completion and highlighting
3
类模板实例化时,如果模板类型是另一个类,那是怎么运行的?
1
用socket写蓝牙通信的时候遇到accept不阻塞的情况
2
为什么输入的最后一条ISBN记录不能够输出?
2
c++ vector引用如何修改
2
std::pair和pair有什么区别?
0
Dijsktra算法结果出错:terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid
1
C++ 不存在从“std::vector<char,std::allocator<char>>" 到char* 的适当转换函数/E0413/C2664