是否可以在省略号(...)中传递不同类型的参数?我正在编写一个函数来进行SQL查询,我想通过Ellipse向Insert语句添加值,我的值是不同类型的。
答案 0 :(得分:2)
作为警告,请不要太聪明。并非我因类似的努力而遭受了巨大的痛苦。 :))
Sqlite内置了查询构建器,请先检查它们。他们不会让你做的是指定一个表名,这可能是你的问题所在。
boost::format是一个不错的选择。这是类型安全的,并且不太可能像C的可变参数一样对你进行分段。
std::string statement = boost::str(
boost::format("SELECT tab.* FROM %1% as tab")
% "my_table_name"
);
编辑:
Sqlite自己处理参数绑定,你不需要任何可变参数。
sqlite3_bind_* functions提供访问权限。
您可以使用以下内容:
const char *sql = "INSERT INTO tab (a,b) VALUES (?1,?2);";
// create statement
sqlite3_bind_int(stmt, 1, 43);
sqlite3_bind_int(stmt, 2, 40000);
这些绑定函数有返回值,你必须检查,我会留给你。
答案 1 :(得分:1)
这是可能的。您需要一些机制来确定参数的数量和类型(例如printf
的格式字符串)。