Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 14.06.2014, 10:26   #1
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
std::vector как шаблонный параметр

Допустим есть шаблон:

template <template <class ...> class Container>
class Node {
public:
	Node() {}
private:
	Container<Node*> _list;
};
Если в качестве контейнера указать std::vector
Node<std::vector> n;
То компилятор выдает следующее: error C2976: std::vector: слишком мало аргументов шаблон.
Вообще std::vector имеет два аргумента, но ведь у второго задано значение по умолчанию, почему он его игнорирует?

З.Ы. Использую Visual Studio 2013
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием
Старый 14.06.2014, 21:06   #2
CX_14_fd
это Tarmaz
 
Регистрация: 14.06.2014
Сообщений: 4
Написано одно полезное сообщение
Ответ: std::vector как шаблонный параметр

Аргументируй правильно например так <int, std::vector<int>
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (14.06.2014)
Старый 14.06.2014, 21:12   #3
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,907
Написано 2,157 полезных сообщений
(для 5,843 пользователей)
Ответ: std::vector как шаблонный параметр

То компилятор выдает следующее: error C2976: std::vector: слишком мало аргументов шаблон.
так не получится, vector класса без шаблонных параметров в принципе не существует, ты либо задаёшь контейнер через #define тогда, либо делаешь Node<vector<Node*>>
----
либо забиваешь на выдумывание странных архитектур и избегаешь такой ситуации
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SBJoker (14.06.2014)
Старый 15.06.2014, 07:30   #4
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
Ответ: std::vector как шаблонный параметр

так не получится, vector класса без шаблонных параметров в принципе не существует
Ему и не нужно существовать, т.к. существуют шаблонные шаблонные параметры.

Проблема первого поста заключается в отсутствии второго аругмента в строке:
Container<Node*> _list;
потому что std::vector имеет два шаблонных параметра (хотя второй и задан по умолчанию, но почему-то игнорируется)
если писать так:
template <template <class ...> class Container>
class Node {
public:
	Node() {}
private:
	Container<Node*, std::allocator<Node*>> _list;
};

Node<std::vector> n;
То все работает, но шаблон тогда получается привязан к std::allocator, чего хочется избежать.

Сделал менее удобным, но более гибким способом
template <class T> struct stdVector { typedef std::vector<T> type; };

template <template <typename ...> class Container>
class Node {
public:
	Node() {}

private:
	typename Container<cNode*>::type _list;
};

...

Node<stdVector> n;
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (15.06.2014)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 18:49.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com