powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны, с++11. Можно ли такое сделать?
9 сообщений из 9, страница 1 из 1
Шаблоны, с++11. Можно ли такое сделать?
    #39359095
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть шаблон-класс, с переменной класса параметра, примерно такой:

Код: plaintext
1.
2.
3.
4.
template<class T> class C1
{
	T m_t;
}



у этого шаблона есть метод, который в зависимости от разных вещей, зовёт разные методы класса Т, обращаясь к m_t

в коде я объявляю переменную, задавая некий другой класс в качестве аргумента:

Код: plaintext
1.
C1<C2> c;



Класс C2 - функциональный, делает какие-то свои вещи.
Класс С1 - интерфейсный, ему приходит на вход строка, он её парсит и понимает, что и с какими параметрами нужно позвать из класса T (т.е. C2)

Теперь я хочу сделать класс С3, наследованный от С2 и добавить туда функционала.
А так же хочу добавить варианты разбора входной строки в С1, т.е. чтобы он "понимал" больше вариантов входной строки, для класса С3.
При этом я хочу начать с класса С1, т.е. сделать сначала логику, задать команды, которые хочется обрабатывать. А стало быть, мне надо будет звать новые функции из m_t. Но тогда код не скомпилируется, потому что у С2(С3) нету ещё таких функций.

Вопрос: можно как-то сделать так, чтобы вызовы отсутствующих функций не компилировались? Можно было бы сделать класс-заглушку В, где определить все методы, вызываемые из С1 как пустые, и от него отнаследовать С2. Но тогда придётся поддерживать 2 класса (С1 и В). Поэтому хочется чтобы при написании в коде С1 m_t.SomeNewMethod3(), при отсутствии SomeNewMethod3 в С2, генерился пустой метод. Это что-то типа как в VB: если я пишу:
Код: vbnet
1.
А := "Some"


то А автоматически стаёт строкой. А если я её объявлю раньше, то нет.

В общем, звучит бредово, но вдруг есть какие решения? Смысл это в том, что хочется сделать один интерфейсный класс для всех возможных вариантов C2, C3, C4 и т.д. с разным набором функционала. В случае отсутствия выдавать наружу "метод не поддерживается"
Знаю, что в шаблонах есть такая штука: если метод не вызывается нигде - он не генерируется, даже если остальные методы (вызываемые) сгенерировались. Но тут обратная ситуация :)
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39359293
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbВопрос: можно как-то сделать так, чтобы вызовы отсутствующих функций не компилировались?
А как тогда ты узнаешь, что тебе пора реализовать новый метод, которого еще нет?
Компилятор промолчит. В рантайме? Это выглядит как плохое решение :)

Надеюсь, язык такого не позволяет :)
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39359814
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39360134
Касалапый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделать методы
Код: plaintext
1.
2.
3.
TempMethod_001(){}
...
TempMethod_999(){}


А потом делать рефакторинг имён методов, не?
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39360185
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kА как тогда ты узнаешь, что тебе пора реализовать новый метод, которого еще нет?Когда с консоли его запущу, он выдаст ошибку. Если мне надо будет, я пойду и реализую его. Такая была идея. Т.е. проектирование от использования, так сказать.

alex_kНадеюсь, язык такого не позволяет :)Ну да, выглядит, как плохое решение, согласен. Просто хотелось отвязать функционал класса С2 от С1. Грубо говоря, хочется чего-то такого: С1:"посчитай мне интеграл", С2: "не понимаю", С1:"умнож 2 на 2", С2: "4". Т.е. в С1 я могу "просить" всё что угодно с консоли, но решение, выполнять или нет, остаётся за С2.

alexy_blackтяжеловато для одного метода

КасалапыйА потом делать рефакторинг имён методов, не?Немного неудобно будет пользоваться такой штукой, но надо подумать, может как-то можно удобнее сделать.
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39360906
Касалапый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Delphi такое кстати легко делается при помощи RTTI. За Си* не знаю, недавно начали изучать.
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39360954
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КасалапыйВ Delphi такое кстати легко делается при помощи RTTI. За Си* не знаю, недавно начали изучать.В плюсах тоже есть RTTI. И как с помощью RTTI это сделать?
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39361148
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbКасалапыйВ Delphi такое кстати легко делается при помощи RTTI. За Си* не знаю, недавно начали изучать.В плюсах тоже есть RTTI. И как с помощью RTTI это сделать?
Любая Actor-Model имплементированная на C++ это делает. CAF, Theron etc. Судя по твоему начальному вопросу - это то что ты ищешь.
...
Рейтинг: 0 / 0
Шаблоны, с++11. Можно ли такое сделать?
    #39364143
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot CEMb]alex_kтяжеловато для одного методакогда ты делаешь что-то на шаблонах, это может вобще не добавить код в результирующие файлы. приведенные там методы просто дадут компилятору ответ на вопрос присуствует ли метод в параметре шаблона, они не будут добавлять реально исполняемого кода.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны, с++11. Можно ли такое сделать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]