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

时间:2014-04-30 09:21:21

标签: c++ templates c++11 lambda visual-studio-2013

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

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,但无济于事。

1 个答案:

答案 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
};