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