C++11 std::函数上的typedef将其缩短
我想在我自己的名称空间中将C++11 std::函数上的typedef将其缩短,c++11,C++11,我想在我自己的名称空间中将std::function的类型缩短为func。这只是个人喜好 我尝试了下面的代码,但遇到语法错误 //MyHeader.hpp template<typename S> struct func; //signature template<typename R, typename ...Args> struct func<R(Args...)>; template<typename R, typename ...Args&g
std::function
的类型缩短为func
。这只是个人喜好
我尝试了下面的代码,但遇到语法错误
//MyHeader.hpp
template<typename S> struct func; //signature
template<typename R, typename ...Args>
struct func<R(Args...)>;
template<typename R, typename ...Args>
//typename typedef std::function<R(Args...)> func; // <R(Args...)>;
using func = std::function<R(Args...)>; //<---closes to solve.
//SomeClass.cpp
func<bool(int)> f;
func<void()> g = [] {
//some code here...
}
//MyHeader.hpp
模板结构函数//签名
模板
结构函数;
模板
//typename typedef std::function func;//;
使用func=std::function// 您的解决方案有点太复杂了,您可能希望像这样使用
#include <functional>
template <class Fct> using func = std::function<Fct>;
#包括
使用func=std::function的模板;
您可以用所需的方式实例化:
int test(bool) { return 1; }
func<int(bool)> f(test);
funct<void()> g = [](){};
int测试(bool){return 1;}
func f(测试);
函数g=[](){};
它只是缺少了include?附加问题,int(bool)
是被视为1个模板参数还是2个?函数有一个类型,当您将函数指针绑定到变量时,该类型将变得可见。lambda也有一个编译器已知的类型。因此,这里的实例化发生在一个类型上。这是一个很好的问题,我刚刚意识到,在别名签名中不需要可变模板。我运行了一个测试代码,它确认int(bool)
只是一个模板参数。这也是一个使用func=std::function的解决方案模板代码>那是一样的:)编译器不在乎你选择哪个名字。我猜,如果std::function
将来添加了额外的可选模板参数,可变版本是一个通用的解决方案。但目前看来,std::function
只有一个模板参数。