型がベクトルかどうかを static_assert で確認できますか? IE では、 a はint
アサーションを発生させますが、avector<int>
はそうしません。
私は次のようなことを考えています:
static_assert(decltype(T) == std::vector, "Some error")
型がベクトルかどうかを static_assert で確認できますか? IE では、 a はint
アサーションを発生させますが、avector<int>
はそうしません。
私は次のようなことを考えています:
static_assert(decltype(T) == std::vector, "Some error")
c ++ 0x:
static_assert(std::is_same<T, std::vector<int>>::value, "Some Error");
はい。
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に/からの継承がある場合、コンパイラエラーが発生する可能性があります。記録のために保管しておいてください。この方法は使用しないでください。:)T
vector<>
private
protected
vector<>