代码之家  ›  专栏  ›  技术社区  ›  Brian

模板函数可以推导lambda参数吗?

  •  3
  • Brian  · 技术社区  · 7 年前

    采用函数指针的模板函数可以推导该函数指针的参数,如下所示:

    template<class... Args>
    void func(void (*ptr)(Args&& ...)) {
        //Do something useful knowing the Args...
    }
    

    你能用lambda做同样的论证吗; 不诉诸 std::function 或者像function\u traits那样编写元编程traits类?i、 e.仅使用函数推导参数。

    1 回复  |  直到 7 年前
        1
  •  5
  •   Brian Bi    7 年前

    不,那是不可能的。模板参数推断只能推断类型、常量和作为参数类型“组成”部分的模板,例如推断 void Args... 从…起 void(*)(Args&&...) 就像你的例子,或者推论 T N 从…起 T(&)[N]

    对于非多态lambda类型 T ,类型 &T::operator() 包含关于lambda参数类型的可推断信息。但是 T 事实并非如此。