21

型がベクトルかどうかを static_assert で確認できますか? IE では、 a はintアサーションを発生させますが、avector<int>はそうしません。
私は次のようなことを考えています:

static_assert(decltype(T) == std::vector, "Some error")
4

4 に答える 4

11

c ++ 0x:

static_assert(std::is_same<T, std::vector<int>>::value, "Some Error");
于 2011-08-06T06:59:51.070 に答える
0

はい

template<typename T>
struct isVector
{
  typedef char (&yes)[2];
  template<typename U>
  static yes check(std::vector<U>*);
  static char check(...);

  static const bool value = (sizeof(check((T*)0)) == sizeof(yes));
};

使用法:

isVector<vector<int> >::value;
isVector<int>::value;

デモ

:私の(複雑な)回答には、がから公に継承されてtrueいるかどうかを評価するという制限があります。Tに/からの継承がある場合、コンパイラエラーが発生する可能性があります。記録のために保管しておいてください。この方法は使用しないでください。:)Tvector<>privateprotectedvector<>

于 2011-08-05T09:22:33.353 に答える