Как изменить каждый элемент пакета параметров и создать кортеж из них? - PullRequest
2 голосов
/ 16 сентября 2011

Я столкнулся с проблемой с шаблоном функции variadic.Мне нужно изучить каждый элемент пакета параметров, упаковать элемент, затем собрать все упакованные элементы в кортеж и вернуть его.Вот общее представление о том, что я хотел бы сделать (типы возвращаемых данных - просто заполнители, не уверен, какими они будут):

template<typename A>
sometype func_helper(A a) {
    //examine a, depending on type, do different stuff with it.
    return modified_a;
}

template<typename... Args>
tuple<sometypes...> func(Args... args) {
    return make_tuple(func_helper...(args));
}

Есть идеи?

1 Ответ

7 голосов
/ 16 сентября 2011

Вы можете использовать выведенный тип возврата.К сожалению, он имеет дублирование кода:

#include <iostream>
#include <tuple>

template<typename A>
int func_helper(A ) {
    //examine a, depending on type, do different stuff with it.
    return 1;
}

char func_helper(double) {
    return 'A';
}

template<typename ...Args>
auto func(Args... args) -> decltype(std::make_tuple(func_helper(args)...)) {
    return std::make_tuple(func_helper(args)...);
}

int main()
{
    auto a = func(1, 3.4);
    std::cout << std::get<0>(a) << ' ' << std::get<1>(a) << '\n';
}
...