В Python я могу использовать *args
, чтобы разрешить переменное количество входов в функцию.Например, следующий фрагмент выведет все аргументы, переданные при вызове f:
def f(*args):
for a in args:
print(a)
Я хотел бы иметь возможность реализовать такой шаблон в C ++ 11 со следующими требованиями:
Функция f всегда будет принимать значение определенного типа T, а затем переменное число входов после;потенциально, это включает 0 дополнительных входов.
Дополнительные входы не обязательно относятся к одному типу, поэтому использование списка инициализаторов не будет работать.
Функция f будет вызываться другимфункция g, которая должна будет пересылать необязательные аргументы в f:
T g(const T& x, args...) {
T output = f(x, args...);
return output;
};
T f(const T& x, args...) {
// do some stuff and return an object of type T
};
Как я могу решить эту проблему проектирования?Я пробовал вариадические шаблоны, но не могу заставить мою реализацию работать правильно (компилируется, но не связывается из-за проблем со ссылками на rvalue).