почему использование шаблона в качестве параметра в шаблоне карты STL запрещено? - PullRequest
1 голос
/ 03 апреля 2012

Я написал этот маленький код

std::map<int,template<class T>> map_;
map_.insert(make_pair<int,message>(myMsg.id,myMsg));

, но компилятор, похоже, не получил его и отображает как ошибку

template argument 2 is invalid

, и когда я попытался исправить, выполнив это

template<class T>
std::map<int,T> map_;

отображается как ошибка:

ожидаемое первичное выражение перед 'шаблоном' |

ошибка: ожидается ';'перед «шаблоном»

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012

Я не уверен в этом, но вы пытаетесь объявить переменную, и это определение должно быть полностью определено. Попытка использовать шаблон не полностью определяет переменную.

Вы можете обернуть его в структуру, если хотите:

template<typename T>
struct Wrapper
{
    typedef std::map<int, T> map_type;
};

Тогда используйте это так:

Wrapper<std::string>::map_type my_wrapped_map;
my_wrapped_map[1] = "Foo";
1 голос
/ 03 апреля 2012

Вы, вероятно, не используете компилятор C ++ 11, и эта строка недопустима:

std::map<int,template<class T>> map_;

Это должно быть

std::map<int,template<class T> > map_;

Обратите внимание на пробел между > >,Pre-C ++ 11, >> всегда обрабатывается как оператор сдвига битов.

Кроме того, что должен делать код?Если я не ошибаюсь, вы должны объявить вашу карту как

std::map<int,message> map_;

Теперь, std::map<int,template<class T>> map_; на самом деле не имеет смысла, если только это не член другого класса шаблона, в этом случае вам нужно

std::map<int,T> map_;
0 голосов
/ 07 декабря 2014
define KEYINT_MAP(T) std::map<int, T>
KEYINT_MAP(class) map;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...