c++ - 使用参数包生成对象
问题描述
我正在寻找一个可以根据命令实例化类的对象。我之所以要这样做,是因为我必须创建一个对象的实例,它们都具有从文件中读取的相同初始参数,但我只想加载这些参数一次。我的解决方案是使用 lambdas,但感觉很脏:
#include <functional>
template <class GENERATED_TYPE, class... Args> requires requires(Args... data) {
{ new GENERATED_TYPE(data...) } -> std::same_as<GENERATED_TYPE*>;
}
class ObjectGenerator {
public:
ObjectGenerator(Args... data){ instance_generator = [data...](){ return new GENERATED_TYPE(data...); }; }
~ObjectGenerator(){}
GENERATED_TYPE* getInstance() { return instance_generator(); }
private:
std::function<GENERATED_TYPE*()> instance_generator;
};
有没有更好的方法,以Args... data
某种方式存储,然后稍后使用存储的参数包?
解决方案
有没有更好的方法,以
Args... data
某种方式存储,然后稍后使用存储的参数包?
不确定更好,但是您可以将参数存储在 a 中std::tuple
,然后std::make_from_tuple
每次都使用它来构造对象。那看起来像
#include <functional>
#include <tuple>
template <class GENERATED_TYPE, class... Args> requires requires(Args... data) {
{ new GENERATED_TYPE(data...) } -> std::same_as<GENERATED_TYPE*>;
}
class ObjectGenerator {
public:
ObjectGenerator(Args... data) : arguments(std::move(data)...) {}
GENERATED_TYPE getInstance() {
return std::make_from_tuple<GENERATED_TYPE>(arguments);
}
private:
std::tuple<Args...> arguments;
};
推荐阅读
- python - Python3:使用 map 而不是 pool.map 不再工作 - 多处理库
- ios - 按下提交按钮后,将在单独的故事板上创建一个新视图 - Swift
- angular - 如何强制 [ngClass] 重新评估函数?
- python - 如果没有 id 或类名,如何使用 selenium 向元素发送输入?
- excel - 合并动态范围(合并函数)
- python - python - 如何在使用 tkinter 时在实例之间传递变量
- jq - 如何在 JQ 中的过滤器之后引用来自更高层的变量?
- c# - Sharepoint 中的 StackOverflow 异常在线
- api - 如何通过 Wikipedia API 获取特殊的元数据?
- java - 在 IBM Rational Software Architect for Java6 Maven 安装中收到致命警报:protocol_version 到 https://repo.maven.apache.org/maven2/