[英]Getting type parameters at runtime
我有一个使用可变参数类型参数的类,该参数只能在用户键入输入时在运行时知道。 类型参数必须仅是一个int
或string
并且必须为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.