У меня есть класс, который использует параметры вариационного типа, которые могут быть известны только во время выполнения, когда пользователь вводит ввод. Параметры типа должны быть только 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;}
Что лучшее решение работать с этим классом, когда тип и количество параметров типа известны только во время выполнения?
Вариадические шаблоны и вычеты типа времени исполнения для меня немного противоречивы. –
Копировать компилятор C++, использовать пользовательский ввод для генерации кода на C++, скомпилировать указанный код и запустить его? (это также может быть худшим способом решения вашей проблемы) – Yakk