Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
есть шаблон-класс, с переменной класса параметра, примерно такой: Код: plaintext 1. 2. 3. 4. у этого шаблона есть метод, который в зависимости от разных вещей, зовёт разные методы класса Т, обращаясь к m_t в коде я объявляю переменную, задавая некий другой класс в качестве аргумента: Код: plaintext 1. Класс 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. то А автоматически стаёт строкой. А если я её объявлю раньше, то нет. В общем, звучит бредово, но вдруг есть какие решения? Смысл это в том, что хочется сделать один интерфейсный класс для всех возможных вариантов C2, C3, C4 и т.д. с разным набором функционала. В случае отсутствия выдавать наружу "метод не поддерживается" Знаю, что в шаблонах есть такая штука: если метод не вызывается нигде - он не генерируется, даже если остальные методы (вызываемые) сгенерировались. Но тут обратная ситуация :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 09:32 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
CEMbВопрос: можно как-то сделать так, чтобы вызовы отсутствующих функций не компилировались? А как тогда ты узнаешь, что тебе пора реализовать новый метод, которого еще нет? Компилятор промолчит. В рантайме? Это выглядит как плохое решение :) Надеюсь, язык такого не позволяет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 13:24 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2016, 11:30 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
Сделать методы Код: plaintext 1. 2. 3. А потом делать рефакторинг имён методов, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2016, 20:40 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
alex_kА как тогда ты узнаешь, что тебе пора реализовать новый метод, которого еще нет?Когда с консоли его запущу, он выдаст ошибку. Если мне надо будет, я пойду и реализую его. Такая была идея. Т.е. проектирование от использования, так сказать. alex_kНадеюсь, язык такого не позволяет :)Ну да, выглядит, как плохое решение, согласен. Просто хотелось отвязать функционал класса С2 от С1. Грубо говоря, хочется чего-то такого: С1:"посчитай мне интеграл", С2: "не понимаю", С1:"умнож 2 на 2", С2: "4". Т.е. в С1 я могу "просить" всё что угодно с консоли, но решение, выполнять или нет, остаётся за С2. alexy_blackтяжеловато для одного метода КасалапыйА потом делать рефакторинг имён методов, не?Немного неудобно будет пользоваться такой штукой, но надо подумать, может как-то можно удобнее сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2016, 06:14 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
В Delphi такое кстати легко делается при помощи RTTI. За Си* не знаю, недавно начали изучать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2016, 22:22 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
КасалапыйВ Delphi такое кстати легко делается при помощи RTTI. За Си* не знаю, недавно начали изучать.В плюсах тоже есть RTTI. И как с помощью RTTI это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 05:15 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
CEMbКасалапыйВ Delphi такое кстати легко делается при помощи RTTI. За Си* не знаю, недавно начали изучать.В плюсах тоже есть RTTI. И как с помощью RTTI это сделать? Любая Actor-Model имплементированная на C++ это делает. CAF, Theron etc. Судя по твоему начальному вопросу - это то что ты ищешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 12:52 |
|
||
|
Шаблоны, с++11. Можно ли такое сделать?
|
|||
|---|---|---|---|
|
#18+
[quot CEMb]alex_kтяжеловато для одного методакогда ты делаешь что-то на шаблонах, это может вобще не добавить код в результирующие файлы. приведенные там методы просто дадут компилятору ответ на вопрос присуствует ли метод в параметре шаблона, они не будут добавлять реально исполняемого кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2016, 19:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39361148&tid=2018359]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 278ms |
| total: | 417ms |

| 0 / 0 |
