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

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

最佳答案

这应该按建议工作,但是您可能遇到了 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/

相关文章:

android - 在 android 中运行 openCL

c++ - 为什么只能在头文件中实现模板?

C++ countof 成员数组的实现

c++ - 我该如何正确处理这个 SFINAE?

c++ - 为什么编译 "std::thread"仿函数需要额外的括号?

c++ - 如何在 C++ 中以 DLL 安全方式返回多个值?

c++ - 为什么优化标志 (-O3) 不能加速四倍精度计算?

c++ - 运算符重载的基本规则和惯用法是什么?

c++ - 了解模板类型/值的重复评估

c++ - boost::序列化和循环引用反序列化