2013-10-15 2 views
-2
template <typename T> 
MyFun(const T container) 
{ 
    // I want to static_assert that all elements in T are equal to SomeType 
} 

Как это сделать? Я имею в виду что-то вдоль линий static_assert(std::is_same<T::type,SomeType>), но это, конечно, не работает ...Как я могу static_assert базовый элемент контейнера?

+1

Как это «не работает»? Какая у вас ошибка? – juanchopanza

ответ

2

вы могли бы использовать

static_assert(std::is_same<typename T::value_type,SomeType>::value, "type in the container is different"); 
+1

Почти правильно. Там немного не хватает. – juanchopanza

+0

@juanchopanza отредактировал, спасибо –

1

Если это стандартный контейнер ...

template <typename Container> 
MyFun(const Constainer& container) 
{ 
    static_assert(std::is_same<typename Container::value_type, SomeType>::value) 
    // I want to static_assert that all elements in Container are equal to SomeType 
} 
1

Вам нужно что-то вроде

static_assert(std::is_same<typename T::value_type, SomeType>::value, 
       "It does not work"); 

Предполагаемый тип контейнера value_type - тип элементов, которые он хранит (например, стандартные контейнеры библиотеки).

См. std::is_same и static_assert.

Смежные вопросы