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 ответов

17 просмотров

Ещё один...

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

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...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта