Шаблонные функции c ++ с переменными аргументами

Можно ли написать шаблонную функцию на C ++, которая принимает переменное количество входных переменных разных типов (количество входных данных может быть ограничено, скажем, 10)? Например, возьмем функцию sql_exec () , которая выполняет строку запроса sql и сохраняет результирующие строки в векторах std указанного типа, то есть

std::vector<double> x,y;
std::vector<std::string> s;
std::string query="select * from ...";

sql_exec(query, s,x,y); // error if less than 3 rows or conversion not possible

Теперь мой наивный подход был бы (ограничен максимум 2 векторами )

struct null_type {};
template <typename T1=null_type, typename T2=null_type>
void sql_query(const std::string& query_str, std::vector<T1>& col1,
           std::vector<T2>& col2) {
    ...
}

Конечно, это глупо, поскольку я не сказал функции об аргументах по умолчанию, и мы получили

error: default template arguments may not be used in function templates

, но на самом деле она компилируется с помощью gcc и -std = c ++ 0x . Однако очевидно, что sql_query () по-прежнему не принимает входных данных переменной длины и должен вызываться с двумя векторами. Кроме того, мне бы хотелось, чтобы что-то переносимое работало на большинстве современных компиляторов. Что-нибудь очевидное, что я пропустил? Я знаю, что могу изменить дизайн и, возможно, использовать boost :: tuple или что-то еще, но мне бы понравился такой простой интерфейс.

6
задан tom 29 June 2011 в 15:00
поделиться