繁体   English   中英

在运行时获取类型参数

[英]Getting type parameters at runtime

我有一个使用可变参数类型参数的类,该参数只能在用户键入输入时在运行时知道。 类型参数必须仅是一个intstring并且必须为1或多个(这就是为什么有Key and Keys的原因)。

using namespace std;

using Column = boost::variant<vector<int>, vector<string>>;
using Columns = vector<Column>;

namespace db {
    template <typename Key, typename... Keys>
    class KeyedTable {
    public:
        KeyedTable(const string& name);

        template<typename V>
        void add(const int pos, const V val, Key k1, Keys... keys);

        string toString();
    private:
        string name;
        vector<string> colNames;
        map<tuple<Key, Keys...>, Columns> data;
    };
}

我必须从vector<Expr>创建此类的实例,其中每个Expr代表类型参数, vector的长度代表所需的类型参数数量:

class Expr {}

class IntExpr : public Expr {public: int i;}

class StringExpr : public Expr {public: string s;} 

当仅在运行时知道类型参数的类型和数量时,使用此类的最佳解决方案是什么?

您正在寻找的东西是不可能的。 在编译期间解析模板。 这意味着将生成所有过载。 当您获得新输入时,您不能动态地“添加”具有不同数量参数的新功能。 (也许,从技术上讲可能是可行的,但它超出了标准c ++)

如果在运行时已知,则在运行时执行。 您不能将编译时逻辑与运行时逻辑混合使用。

如果您的输入具有零键,您会期望发生什么?

我认为您将需要map<vector<KeyType>, Columns> data 您已经有一个Columns的向量,因此它似乎有些自然。

暂无
暂无

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

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