如何修改参数包的每个元素,并从那些元素创建一个元组?

时间:2011-09-16 15:18:37

标签: c++ templates c++11 variadic-templates function-templates

我遇到了一个使用可变参数函数模板的问题。我需要检查参数包的每个元素,打包元素,然后将所有打包的元素填充到元组中并返回它。以下是我想做的一般概念(返回类型只是占位符,不确定它们是什么):

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 个答案:

答案 0 :(得分:7)

您可以使用推断的返回类型。遗憾的是它有代码重复:

#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';
}