static_assert可以检查类型是否为向量?

小太郎*_*小太郎 18 c++ static-assert c++11

static_assert可以检查类型是否为向量?IE,一个int会提出断言,而一个vector<int>不会.
我正在考虑以下方面的事情:

static_assert(decltype(T) == std::vector, "Some error")
Run Code Online (Sandbox Code Playgroud)

Arv*_*vid 20

是.考虑以下元函数:

#include <stdio.h>
#include <vector>

template <class N>
struct is_vector { static const int value = 0; };

template <class N, class A>
struct is_vector<std::vector<N, A> > { static const int value = 1; };

int main()
{
   printf("is_vector<int>: %d\n", is_vector<int>::value);
   printf("is_vector<vector<int> >: %d\n", is_vector<std::vector<int> >::value);
}
Run Code Online (Sandbox Code Playgroud)

只需使用它作为你的表达static_assert.

  • 请记住,它也可能具有与默认值不同的分配器类型. (6认同)
  • @Steve Jessop:或者继承自`std :: true_type`和`std :: false_type`.这就是为什么它们被包含在c ++ 0x中. (5认同)
  • 我猜使用`bool`会更清楚. (4认同)

raf*_*fak 11

的C++ 0x:

static_assert(std::is_same<T, std::vector<int>>::value, "Some Error");
Run Code Online (Sandbox Code Playgroud)

  • 但是如果矢量是一个char矢量,我也想接受int矢量呢? (4认同)