首页 > 解决方案 > std::function 上的 typedef 以缩短它

问题描述

我想在我自己的命名空间中缩短std::function<bool(int)>输入func<bool(int)>。这只是个人喜好。

我在下面尝试了以下代码,但遇到语法错误。

//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...
}

我怎样才能做到这一点?

标签: c++11

解决方案


您的解决方案有点太复杂了,您可能希望像这样使用别名模板

#include <functional>

template <class Fct> using func = std::function<Fct>;

您可以以所需的方式实例化:

int test(bool) { return 1; }

func<int(bool)> f(test);
funct<void()> g = [](){};

推荐阅读