Как получить тип контейнера (например, int, double, …) из шаблона? Переполнение стека

Я пытаюсь создать C ++ — Printing-Function, которая печатает любой STL-контейнер с помощью алгоритма копирования и пользовательского заголовка ранее.

Моя проблема в том, что мне нужно распечатать его с помощью алгоритма копирования, поэтому мне нужен тип шаблона для ostream_iterator («ostream_iterator»)?

Как я могу получить тип контейнера за шаблоном

(Я попробовал это с typeid (продолжение), но это не сработало — Спасибо!

 template<typename Container>
void HeaderPrint(Container cont, std::string header = ""  )
{
std::cout << header << std::endl;
copy(cont.begin(),cont.end(), ostream_iterator<typeid(cont)>(cout," "));
std::cout << std::endl;
}

0

Решение

Контейнеры стандартной библиотеки определяют value_type с типом контейнера:

copy(cont.begin(),cont.end(), ostream_iterator<typename Container::value_type>(cout," "));

Если вы используете свой собственный контейнерный класс, было бы разумно также использовать это соглашение:

template <typename T>
class MyContainer
{
public:
typedef T value_type;
....
};
2

Другие решения

juanchopanza ответил о типе контейнера, но есть и другой способ.

Все стандартные контейнеры имеют begin() метод. Чтобы получить его тип, используйте decltype, Итак, ваш метод будет:

template<typename Container>
void HeaderPrint(Container cont, std::string header = ""  )
{
std::cout << header << std::endl;
copy(cont.begin(),cont.end(), ostream_iterator<decl_type(*cont.begin())>(cout," "));
std::cout << std::endl;
}

Я все еще нахожу как сказал Хуанхопанза лучше.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector