170 похожих чатов

Есть переменная queue<string, list<string>>. Как её передать в функцию где

параметр queue<string> ? Делать static_cast? Или сделать функцию шаблонной где контейнер для queue шаблонный?

13 ответов

17 просмотров

Второе, разумеется.

Станислав-Трухан Автор вопроса
Sergey Anisimov
Второе, разумеется.

А помогите написать такой шаблон пожалуйста. Так не получается: template <typename C> void Foo(queue<string, C<string>> &q);

Станислав Трухан
А помогите написать такой шаблон пожалуйста. Так н...

Недавно по аналогичному поводу писал. Обычный typename элиасит тип, а Вам нужен шаблон, т.е.: template < template < typename > typename C > void Foo(queue<string, C<string>> &q); Edit: Добавлю сразу разъясняющего материала. template < typename > struct Template; struct Typename; /* ... */ template < typename > struct ExampleA; template < template < typename > typename > struct ExampleB; template < typename, template < typename > typename > struct ExampleC; /* ExampleA<Typename> -- ok ExampleA<Template> -- error ExampleB<Typename> -- error ExampleB<Template> -- ok ExampleC<Typename, Template> -- ok ExampleC<Template, Typename> -- error */ Надеюсь, так понятнее (если вдруг не было).

Станислав-Трухан Автор вопроса
Sergey Anisimov
Недавно по аналогичному поводу писал. Обычный type...

Что-то не получается. Выдает ошибку: 'void Foo(std::queue<std::string,C<std::string>> &)': could not deduce template argument for 'std::queue<std::string,C<std::string>> &' from 'std::queue<std::string,std::deque<std::string,std::allocator<std::string>>>' template <template <typename> typename C> void Foo(queue<string, C<string>> &q) {} queue<string> q; Foo(q);

Станислав Трухан
Что-то не получается. Выдает ошибку: 'void Foo(std...

Для C<> требуется два шаблонных параметра (второй под аллокатор). template < template < typename, typename > /* or < typename... > */ typename C >

Станислав-Трухан Автор вопроса
Станислав-Трухан Автор вопроса
Sergey Anisimov
Для C<> требуется два шаблонных параметра (второй ...

Если так делать, template <template <typename...> typename C> void Foo(queue<string, C<string>> &q) {} queue<string> q; Foo(q); то ошибка: 'void Foo(std::queue<std::string,C<std::string>> &)': could not deduce template argument for 'std::queue<std::string,C<std::string>> &' from 'std::queue<std::string,std::deque<std::string,std::allocator<std::string>>>'

Станислав Трухан
Так тоже не работает. 'C': too few template argume...

Это я Вам глупостей наговорил: Вам на уровне определения шаблона (в шаблоне, C который) потребуется предоставить параметр по умолчанию (для второго typename), сообразный std::list (стандартный аллокатор от string т.е.), в таком случае.

Станислав-Трухан Автор вопроса
Sergey Anisimov
Это я Вам глупостей наговорил: Вам на уровне опред...

Да, так работает template <class Container = std::deque<string>> void Foo(queue<string, Container> &q) {}

Станислав-Трухан Автор вопроса
Станислав Трухан
Да, так работает template <class Container = std:...

А обязательно в этом случае шаблонный параметр по-умолчанию указывать?

Станислав Трухан
А обязательно в этом случае шаблонный параметр по-...

В таком - нет, кроме того, шаблон в качестве параметра там тоже не нужен, если тип элемента фиксирован (typename достаточно, но пытаться параметризировать его не нужно и нельзя).

Станислав-Трухан Автор вопроса
Sergey Anisimov
В таком - нет, кроме того, шаблон в качестве парам...

Ага, вижу. Можно просто template <class Container> void Foo(queue<string, Container> &q) {}

Станислав Трухан
Ага, вижу. Можно просто template <class Containe...

Да. Но изначальная попытка Container<string>, разумеется, невозможна, поскольку Container - элиас на тип, а не на шаблон.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта