繁体   English   中英

声明一个STL容器来存储模板类型的变量

[英]declaring an STL container to store a variable of a template type

我有一个具有成员args的类,该成员存储一个std::string和一个std::type_index

模板函数setArgument()将属性的名称及其typeidargs

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() 但是,值的类型是模板类型AttrType

我的问题是我如何声明args来存储此模板类型,因为我事先不知道该类型?

例如std::vector<std::tuple<std::string, std::type_index, AttrType>> args;

例如setArgument()可以添加

"alpha", f, 3.3
"beta", i, 3

向量的元素必须具有特定的类型,因此您需要某种类型的擦除。

如果可以实例化setArgument的类型是真正不受约束的,则需要any类型。 boost::any与C ++ 11兼容,当您移至C ++ 17时可以用std::any代替。

std::vector<std::pair<std::string, std::type_index, boost::any>> args;

如果有有限的类型列表供您选择,则可以改用variant (在C ++ 17之前使用boost::在之后使用std:: :)。

std::vector<std::pair<std::string, std::type_index, boost::variant<int, float, string/*, ...*/>>> args;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM