我正在写一个简单的通用池。模板类在构造函数中获取一个参数,该参数是一个工厂函数,用于根据需要实例化池中的对象。
template<typename T>
struct Foo {
std::function <T*()> factory_;
Foo(std::function<T*()> factory): factory_(factory) {}
};
这编译很好,但我想使用lambda:
为构造函数创建一个默认参数Foo(std::function<T*()> factory = [](){return new T();} ): factory_(factory) {}
这不编译 - 它说T是未知的。有没有办法让lambda表达式知道类模板参数?我尝试使用typedef
,但无济于事。
答案 0 :(得分:3)
这应该按照提议的方式工作,但是你可能遇到了VC ++中的一个错误(它还没有完全准备好C ++ 11)。
作为一种解决方法,您可能会尝试使用私有静态方法替换lambda。
template <typename T>
class LIFOPool
{
std::function <T*()> factory_;
//...details irrelevant
static T* DefaultMake() { return new T{}; }
public:
LIFOPool(std::function<T*()> factory = DefaultMake) : factory_(factory) {}
//...details irrelevant
};