我有一个使用可变参数类型参数的类,只有在用户输入输入时才能在运行时知道。类型参数必须只有int
或string
,且必须为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;}
当仅在运行时知道类型参数的类型和数量时,使用此类的最佳解决方案是什么?
答案 0 :(得分:0)
你在寻找什么是不可能做到的。在编译期间解析模板。这意味着会生成所有重载。你不能&#34;添加&#34;获得新输入时,动态具有不同数量的新函数。 (好吧,从技术上讲,某种程度上可能,但它超出了标准的c ++)。
如果它在运行时已知,则在运行时进行。您不能将编译时逻辑与运行时逻辑混合在一起。
如果输入的密钥为零,您会发生什么?
我认为你需要像map<vector<KeyType>, Columns> data
这样的东西。你已经拥有Columns
的向量,所以它看起来有点自然。