【问题标题】:Check if template type is any instantiation of std::array [duplicate]检查模板类型是否是 std::array 的任何实例化 [重复]
【发布时间】:2020-04-16 14:35:01
【问题描述】:

我需要一些编译时检查传递给模板函数的模板类型是否是 std::array 的任何实例化

喜欢

IsStdArray<std::array<float, 12>>::value; // should evaluate to true
IsStdArray<std::array<int, 1000>>::value; // should evaluate to true
IsStdArray<std::vector<float>>::value;    // should evaluate to false
IsStdArray<std::string>::value            // should evaluate to false

我特别努力想出任何与数组大小无关的东西。请注意,返回 constexpr bool 的函数也可以作为解决方案!

【问题讨论】:

  • 这听起来像是一个设计问题的编码解决方案。您要解决的实际问题是什么?

标签: c++ c++14


【解决方案1】:

你可以部分特化一个特质类。

template<typename T>
struct IsStdArray : std::false_type {};

template<typename T, std::size_t N>
struct IsStdArray<std::array<T, N>> : std::true_type {};

【讨论】:

  • 谢谢,这正是我需要的
猜你喜欢
  • 2018-10-21
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多