У меня есть функция f
:STL контейнер параметр шаблона, содержащий определенный объект
template <typename T>
void f(T<int> ints)
{ /* */ }
Эта функция должна принимать std::vector<int>
или std::initializer_list<int>
или любой другой контейнер STL, но только, если она содержит int
.
я могу жить с ним принимать другие class
эс с int
в качестве параметра шаблона, но я не хочу, чтобы принять std::vector<char>
или std::vector<double>
или std::list<double>
или что-то вроде этого.
Как я могу это понять?
Есть ли значение желаемых один подход по сравнению с другими ('станд :: enable_if_t' против' static_assert')? – hgiesel
@hgiesel Подход 'std :: enable_if' позволяет вам иметь другие перегрузки, которые могут быть выбраны, если эта версия недействительна, а также документирует ваши требования к типу в объявлении. Метод 'static_assert' дает лучшее сообщение об ошибке и не мутирует ваше объявление. – TartanLlama