Здравствуйте, Владислав Курмаз, Вы писали:
ВК>Необходимо написать макрос для упрощения задания частичных специализаций шаблона < P1 > .. <P1, ..., P10>
ВК>танцы с бубном не помогли и хочется спросить у участников форума. Есть ли решение у данной задачи?
На вариадиках нормального решения нету, так как хоть они и есть, рекурсивный обход списка аргументов не поддерживается.
Народ в бусте делает костыль под названием VMD, но это все равно будет костыль.
Но это очень просто делается на Boost.Preprocessor:
Здравствуйте, Владислав Курмаз, Вы писали:
ВК>Здравствуйте, jazzer, Вы писали: ВК>Спасибо, буду пробовать.
ВК>Хотел уточнить один момент. ВК>Меня интересует строка ВК>
ВК>значение ??? Должно меняться от 1 до 10, LOKI_TYPELIST_1 .. LOKI_TYPELIST_10. Это возможно будет реализовать через Boost.Preprocessor?
Можно, само по себе это просто: LOKI_TYPELIST_##n
Но т.к. нам нужно раскрыть аргументы до того, как применять LOKI_TYPELIST_3, и нужно, чтоб их было именно 3, а скобки у нас стоят вокруг BOOST_PP_ENUM_PARAMS, а не внутри, то придется извратиться.
Самый простой способ — с дополнительной макрой, в которой как раз эти скобки и будут:
Здравствуйте, Masterkent, Вы писали:
M>jazzer:
J>>На вариадиках нормального решения нету, так как хоть они и есть, рекурсивный обход списка аргументов не поддерживается.
M>А можно поподробнее описать суть проблемы с variadic-ами? Если я правильно понял задачу, то она, вроде, решается довольно легко:
M>http://ideone.com/mfPjm
Решение уже подсказали, даже два.
Задача была именно в автоматизации задания частичных специализаций, чтобы не копипастить в коде что-то типа этого
Здравствуйте, jazzer, Вы писали:
J>В вышеупомянутой VMD примерно такой подход и использется, только до 256
У VDM тоже есть ограничение на невозможность отследить 0 аргументов? или там есть всё-таки решение?
Re[3]: __VA_ARGS__ и LOKI_TYPELIST_? (вложенные define-ы)
Здравствуйте, Masterkent, Вы писали:
M>jazzer:
J>>На вариадиках нормального решения нету, так как хоть они и есть, рекурсивный обход списка аргументов не поддерживается.
M>А можно поподробнее описать суть проблемы с variadic-ами?
Я о variadic macros, не о variadic templates. У variadic templates таких проблем нет. А вот variadic macros — довольное бесполезное изделие, когда нет средств поэлементной обработки __VA_ARGS__.
M>Если я правильно понял задачу, то она, вроде, решается довольно легко: M>http://ideone.com/mfPjm
+1. Если поддерживаются variadic templates, и если LOKI_TYPELIST_N делает то, о чем мы оба думаем, то можно все решить вообще без привлечения препроцессора и макросов LOKI.
Просто поддержке variadic macros уже сто лет в обед, а variadic templates — все еще довольно новая фишка, которая есть далеко не везде, а где есть, не всегда хорошо реализована.
Здравствуйте, Владислав Курмаз, Вы писали:
ВК>Здравствуйте, jazzer, Вы писали:
J>>В вышеупомянутой VMD примерно такой подход и использется, только до 256 ВК>У VDM тоже есть ограничение на невозможность отследить 0 аргументов? или там есть всё-таки решение?
Здравствуйте, Владислав Курмаз, Вы писали:
ВК>Здравствуйте, jazzer, Вы писали:
J>>В вышеупомянутой VMD примерно такой подход и использется, только до 256 ВК>У VDM тоже есть ограничение на невозможность отследить 0 аргументов? или там есть всё-таки решение?
Я не использовал VMD (честно, не знаю что это).
Но для 0 аргументов придумалось следующее решение:
Теперь конструкция VA_SIZE() возвращает 0.
Наверное, можно реализовать и более эффективно. Нужно подумать.
Текущая реализация может принимать от 0 до 10 аргументов.