相关疑难解决方法(0)

是否有任何理由说明为什么使用std :: tuple传递c ++模板包

假设我们想要创建一个帮助类来反转模板包,例如如下:

#include <tuple>
#include <utility>
#include <typeinfo>
#include <iostream>

template <class>
struct sizer;

template <template<class...> class Pack, class... Args>
struct sizer<Pack<Args...>> {
   static constexpr size_t value = sizeof...(Args);
};

template <class Pack, class Indices = std::make_index_sequence<sizer<Pack>::value>>
struct reverse_pack;

template <class... Args, size_t... I>
struct reverse_pack<std::tuple<Args...>, std::integer_sequence<std::size_t, I...>> {
    using type = typename std::tuple<typename std::tuple_element<(sizeof...(Args) - I - 1), std::tuple<Args...>>::type...>;
};

int main() {
   std::cout << typeid(reverse_pack<std::tuple<int, float, double>>::type).name() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用例如函数签名作为模板参数成功完成相同的事情:

#include <utility>
#include <typeinfo>
#include <iostream>

template <class> …
Run Code Online (Sandbox Code Playgroud)

c++ templates tuples variadic-templates c++14

2
推荐指数
1
解决办法
215
查看次数

标签 统计

c++ ×1

c++14 ×1

templates ×1

tuples ×1

variadic-templates ×1