Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11:用于调用类型的默认构造函数的可变lambda模板_C++_Templates_C++11_Lambda_Variadic Templates - Fatal编程技术网

C++ C++;11:用于调用类型的默认构造函数的可变lambda模板

C++ C++;11:用于调用类型的默认构造函数的可变lambda模板,c++,templates,c++11,lambda,variadic-templates,C++,Templates,C++11,Lambda,Variadic Templates,我想为std::function创建一个模板,该模板通过调用默认构造函数返回类的默认值 我试过这个: template <class T,class... Args> inline std::function<T(Args...)> zero(){ return [](Args...){ return T();}; } 编译时,我得到一个错误调用'Image::drawerachpixel(std::function)…如果没有明确的模板参数列表,就不能调用ze

我想为
std::function
创建一个模板,该模板通过调用默认构造函数返回类的默认值

我试过这个:

template <class T,class... Args> inline std::function<T(Args...)> zero(){
    return [](Args...){ return T();};
}

编译时,我得到一个错误
调用'Image::drawerachpixel(std::function)

如果没有明确的模板参数列表,就不能调用
zero
。它具有模板参数:

template <class T, class... Args>
//        ^^^^^^^^^^^^^^^^^^^^^^
inline std::function<T(Args...)> zero()
模板
//        ^^^^^^^^^^^^^^^^^^^^^^
内联std::函数zero()
无法推导模板参数,因此模板参数没有相应的类型。
相反,请使用转换运算符模板:

struct Zero
{
     template <typename T, typename... Args>
     operator std::function<T(Args...)> ()
     {
         return [] (Args...) { return T(); };
     }
};
structzero
{
模板
运算符std::函数()
{
return[](Args…{return T();};
}
};
像以前一样使用它

template <class T, class... Args>
//        ^^^^^^^^^^^^^^^^^^^^^^
inline std::function<T(Args...)> zero()
struct Zero
{
     template <typename T, typename... Args>
     operator std::function<T(Args...)> ()
     {
         return [] (Args...) { return T(); };
     }
};