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

Как создать класс в котором будет шаблонный указатель на разные

типы
Класс содержащий шаблонные указатели, не пойму как его создать чтобы при иницализации допускались разные типы IUserMenu

class ScreenStack final
{
public:
explicit ScreenStack(std::initializer_list
<std::unique_ptr<IUserMenu<?>>> &list_menu)
{
for (auto& element : list_menu)
{
screens_.emplace(std::move(element.get()));
}

}

private:
std::stack<std::unique_ptr<IUserMenu<?>>> screens_;
}
Сам класс IUserMenu

template < typename T >
class IUserMenu
{
protected:

// Displays the screen interface to the user
virtual void display_interface() const = 0;

// title, body, select
virtual void print_title() const = 0;
virtual void print_body() const = 0;
virtual void print_select() const = 0;

// Reads user select input
std::unique_ptr<IStandartReader<T>> reader_;

std::vector<std::tuple<T, std::string>> choices_;
std::string location_name_;
public:
virtual ~IUserMenu() {}
};
Его наследник и ему подобные со строками и тд

class MainMenu final : public IUserMenu<short>
{
public:
MainMenu() noexcept;
virtual void display_interface() const override;


private:
// title, body, select
virtual void print_title() const override;
virtual void print_body() const override;
virtual void print_select() const override;

/* IUserMenu
// std::vector<std::tuple<T, std::string>> choices_;
// std::unique_ptr<IStandartReader<short>> reader_;
// std::string location_name_;
*/
};
Ну и на выходе хотелось бы получать что-то типо такого

auto screen_stack{ ScreenStack{std::make_unique<AltMenu>() /*std::string*/, std::make_unique<MainMenu>() /* short*/} };

13 ответов

13 просмотров

Ещё один...

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

Aleksander Spichak
никак

А я надеялся что можно 😢

'Егор 'Зорин
Вопрос в том как создать класс в котором содержатс...

Это будет скорее union-like над указателями на разные типы, если без какой-либо связи между ними.

Sergey Anisimov
Это будет скорее union-like над указателями на раз...

Ну есть шаблонный интерфейс, от него наследники которые его специализируют в int string и ТД, вот, а главный класс содержит указатель на интерфейс

Sergey Anisimov
Это будет скорее union-like над указателями на раз...

А как это примерно можно сделать? Не понимаю

'Егор 'Зорин
Ну есть шаблонный интерфейс, от него наследники ко...

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

'Егор 'Зорин
Ну есть шаблонный интерфейс, от него наследники ко...

Это вроде CRTP чтоли? template < typename Base > struct IFace { }; struct Impl : IFace<Impl> /* ... */ ? Это не поможет, поскольку интерфейс у каждой имплементации с т.з. языка оказывается самостоятельным классом.

Sergey Anisimov
Это вроде CRTP чтоли? template < typename Base > s...

А как можно по другому реализовать тоже самое?

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

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

Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
13
Всем привет! Имеется функция: 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
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта