Я пытался создать общую функцию, которая может принимать имя и значения таблицы и возвращать вставку в запрос, и придумал что-то вроде ниже:
struct any {
enum type {Int, Float, String};
any(int e) { m_data.INT = e; m_type = Int;}
any(float e) { m_data.FLOAT = e; m_type = Float;}
any(char* e) { m_data.STRING = e; m_type = String;}
type get_type() const { return m_type; }
int get_int() const { return m_data.INT; }
float get_float() const { return m_data.FLOAT; }
char* get_string() const { return m_data.STRING; }
private:
type m_type;
union {
int INT;
float FLOAT;
char *STRING;
} m_data;
};
template<typename ...Args>
std::string GetInsertString(const std::string& tableName, Args... args)
{
std::string insertString = "INSERT INTO ";
insertString += tableName;
insertString += " VALUES(";
std::vector<any> vec = {args...};
std::ostringstream ss;
for (unsigned i = 0; i < vec.size(); ++i)
{
switch(vec[i].get_type())
{
case any::Int:
ss.str("");
ss << vec[i].get_int();
insertString += ss.str() + ",";
break;
case any::Float:
ss.str("");
ss << vec[i].get_float();
insertString += ss.str() + ",";
break;
case any::String:
ss.str("");
insertString += "'" + std::string(vec[i].get_string()) + "'," ;
break;
}
}
insertString.pop_back();
insertString += ");";
return insertString;
}
где любой класс основан на этой ссылке Как Я перебираю упакованный список аргументов шаблона с переменным числом аргументов?
Но проблема в том, что я не могу передать тип std::string
в качестве вариационного аргумента этой функции, так как у нас есть объединение в любом классе, поэтому нужна помощь от вас, ребята, чтобы передать тип std::string
в качестве аргумента для построения значений для запроса на вставку.