在运行时获取类型参数

时间:2015-01-20 10:03:11

标签: c++ c++11

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

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;} 

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

1 个答案:

答案 0 :(得分:0)

你在寻找什么是不可能做到的。在编译期间解析模板。这意味着会生成所有重载。你不能&#34;添加&#34;获得新输入时,动态具有不同数量的新函数。 (好吧,从技术上讲,某种程度上可能,但它超出了标准的c ++)

如果它在运行时已知,则在运行时进行。您不能将编译时逻辑与运行时逻辑混合在一起。

如果输入的密钥为零,您会发生什么?

我认为你需要像map<vector<KeyType>, Columns> data这样的东西。你已经拥有Columns的向量,所以它看起来有点自然。