【发布时间】:2019-04-30 06:40:07
【问题描述】:
我有一个类,它有一个成员 args,它存储了一个 std::string 和一个 std::type_index。
模板函数setArgument() 将属性名称及其typeid 添加到args。
class OperationEntry:
{
std::vector<std::pair<std::string, std::type_index>> args;
template <class AttrType>
inline OperationEntry& setArgument(const std::string& name)
{
args_.push_back({name, typeid(AttrType)});
return *this;
}
我想将args 的定义扩展为std::tuple 并保留一个将填充到setArgument() 中的附加值。但是类型
value 是模板类型AttrType。
我的问题是我如何声明 args 来存储这个模板类型,因为我事先不知道类型'?
例如 - std::vector<std::tuple<std::string, std::type_index, AttrType>> args;
例如setArgument()可以添加
"alpha", f, 3.3
"beta", i, 3
【问题讨论】:
-
查找
std::any。 -
您不能“存储类型”。类型不是对象。你想用这个类型做什么?
-
@StoryTeller 我用一个例子更新了我的问题并修正了一个错字。我不知道如何将
std::tuple中第三个元素的类型声明为setargument()实例化的类型。 -
我主要使用 c++ 11 和一些 c++ 14。