我正在编写一个简单的通用池。模板类在构造函数中采用一个参数,该参数是一个工厂函数,用于根据需要实例化池中的对象。
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)。
作为解决方法,您可以尝试用私有(private)静态方法替换 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
};
关于c++ - 访问默认 lambda 参数中的模板类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23384256/