лучший способ реализовать привязку SQL-оператора в C ++ - PullRequest
6 голосов
/ 13 июня 2011

Хорошо, поэтому я пишу оболочку БД в c ++ 0x, API - в C.

У меня есть подготовленные операторы, которые я могу связать во время выполнения.

Я хотел бысвяжите и выполните оператор в вызове функции 1 для оболочки.

Хотя я сначала должен использовать шаблоны вариантов.но с документацией, которую я видел, я не узнал, как ограничить типы, которые вводятся как типы шаблонов, фиксированным набором (int, string, double) и как уметь выполнять базовую логику для этих типов.

что-то вроде (псевдокод)

foreach arg in args
    if arg1==std::string
        bindToString(arg);
    else if int...

спасибо

1 Ответ

5 голосов
/ 13 июня 2011

Воспользуйтесь функцией перегрузки функции.

void bind(std::string& arg) { bindstring(arg); }
void bind(int& arg) { bindint(arg); }
...

std::vector<boost::variant<double,std::string,int>> args =  {...}
for (auto arg : args)
    bind(arg);

- редактировать -
Еще один подход с использованием шаблона variadic

void bind(std::string& arg) { bindstring(arg); }
void bind(int& arg) { bindint(arg); }
void bind(void) {}

template <typename T, typename... Args>
void bind(T& arg, Args& args)
{
  bind(arg);  bind(args...);
}
...