tly*_*tly 2 c++ lambda templates variadic-templates c++11
我想为a创建一个模板,std::function<T(Variable nums of arguments)>通过调用默认构造函数来返回类的默认值.
我试过这个:
template <class T,class... Args> inline std::function<T(Args...)> zero(){
return [](Args...){ return T();};
}
Run Code Online (Sandbox Code Playgroud)
我想在你只需要默认值而没有复杂功能的情况下使用它,例如在我的Image<T>类中:
template <typename T> class Image{
...
void drawEachPixel(std::function<T(size_t,size_t)> func){
forRange(x,w){
forRange(y,h){
this->setPixel(x,y,func(x,y));
}
}
}
...
};
Run Code Online (Sandbox Code Playgroud)
清除我可以打电话的图像:
image.drawEachPixel(zero());
Run Code Online (Sandbox Code Playgroud)
编译时我得到错误no matching function for call to 'Image<unsigned char>::drawEachPixel(std::function<unsigned char()>)'...
您不能只在zero没有显式模板参数列表的情况下调用.它有模板参数:
template <class T, class... Args>
// ^^^^^^^^^^^^^^^^^^^^^^
inline std::function<T(Args...)> zero()
Run Code Online (Sandbox Code Playgroud)
无法推导出模板参数,因此模板参数保持不相应的类型.
而是使用转换运算符模板:
struct Zero
{
template <typename T, typename... Args>
operator std::function<T(Args...)> ()
{
return [] (Args...) { return T(); };
}
};
Run Code Online (Sandbox Code Playgroud)
并像以前一样使用它.演示.