К примеру есть вектор:
vector<int> alfa;
как узнать тип его элементов до появления первого элемента. Типа:
decltype(alfa[0]);
Посмотреть на <int> в скобках :)
Вообще-то decltype не вычисляет само выражение, так что до появления элемента использовать alfa[0] можно, но... Это будет ссылка.
Я бы делал так:
decay_t<decltype(alfa[0])> b;
Но не проще ли для вектора (и прочих стандартных контейнеров) использовать его value_type?
Для примера определим версию функции вывода содержания STL контейнера:
template <class V>
void show(V v)
{
std::copy(v.begin(), v.end(),
std::ostream_iterator<typename V::value_type>(std::cout, " "));
std::cout << std::endl;
}
std::ostream_iterator в аргументе шаблона должен иметь тип элементов контейнера.
При использовании не важно какого типа контейнер и какого типа его элементы...
int main()
{
std::vector<int> v1{1, 2};
std::vector<std::string> v2 {"first", "second"};
show(v1);
show(v2);
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей