У меня есть код, который выглядит какшаблонные функции в качестве параметра
template<typename C>
void invoke() {
if (thing_known_at_runtime) {
C::template run<int>(4);
} else {
C::template run<char>('a');
}
}
struct output {
template<typename T>
static void run(T x) {
cout << x;
}
};
invoke<output>();
И это работает.
Но мне не нравится определение веса в тяжелом весе. Я хотел бы, чтобы иметь возможность написать:
template<typename T>
void output(T x) {
cout << x;
}
И затем вызвать либо вызвать < выход>() или вызова (выход). Есть ли способ определить invoke, чтобы это сработало?
(оба вывода и вызов более сложным - это упрощенная версия для задавая вопрос с Нет, решения, которые вовлекают знавшие Int, когда я называю Invoke не полезны.).
Разрешена C++ 11? И правильно ли я понимаю, что вы просто хотите вызвать функцию с сохраненными аргументами? – chris
Как мне помочь std :: function? Да, разрешен C++ 11. Я хочу вызвать функцию с сохраненными (фактически вычисленными) аргументами * и параметрами шаблона *. Фактически, позвольте мне изменить пример, чтобы сделать это понятным. – dspeyer
Вы не хотите определять две версии 'invoke()'? – jxh