访问默认lambda参数中的模板类参数

Access template class parameter in default lambda argument

本文关键字:参数 默认 lambda 访问      更新时间:2023-10-16

我正在编写一个简单的通用池。模板类在构造函数中获取一个参数,该参数是一个工厂函数,用于根据需要实例化池中的对象。

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,但没有成功。

这应该按建议工作,但您可能在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
};