2

可変引数関数テンプレートで問題が発生しています。パラメーター パックの各要素を調べ、要素をパッケージ化し、パッケージ化されたすべての要素をタプルに詰め込んで返す必要があります。これが私がやりたいことの一般的な考え方です(戻り値の型は単なるプレースホルダーであり、どうなるかわかりません):

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));
}

何か案は?

4

1 に答える 1

8

推定された戻り値の型を使用できます。悲しいことに、コードの重複があります:

#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';
}
于 2011-09-16T15:34:11.993 に答える