访问默认lambda参数中的模板类参数
Access template class parameter in default lambda argument
我正在编写一个简单的通用池。模板类在构造函数中获取一个参数,该参数是一个工厂函数,用于根据需要实例化池中的对象。
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
};
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本