c++ - 如何在编译时切换/选择类型?

标签 c++ templates c++11 compile-time typetraits

有没有一种标准方法可以让我在 编译时 在 c++11 中的无符号索引上选择类型?

例如:

using type_0 = static_switch<0,T,U>;  // yields type T
using type_1 = static_switch<1,T,U>;  // yields type U

如果有 variadic-template 版本,那将非常有用。

最佳答案

这应该可行:

template<std::size_t N, typename... T>
using static_switch = typename std::tuple_element<N, std::tuple<T...> >::type;

另一种方法:

template<std::size_t N, typename T, typename... Ts>
struct static_switch {
  using type = typename static_switch<N - 1, Ts...>::type;
};
template<typename T, typename... Ts>
struct static_switch<0, T, Ts...> {
  using type = T;
};

关于c++ - 如何在编译时切换/选择类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404102/

相关文章:

c++ - 更新 : C++ undefined reference

Java - 如何在模板类的构造函数中初始化包含 T 类型项目的数组?

javascript - 在这种情况下我应该使用 JavaScript 原型(prototype)吗?

c++ - C++11 中 map 标准的 at() const 访问器是什么?

C++ 构造函数和右值

c++ - 在 Eigen C++ 中关心断言失败的最佳方法是什么?

c++ - 阻止其他人根据条件调用函数,但总是允许类调用它?

C++ 指针 - 常见做法

C++ 模板专门化以提供/添加不同的成员函数

C++ 模板 - 仅当模板参数中存在特定值时才添加函数