R>>Не получится потому, что директивы #pragma обрабатываются еще до компиляции препроцессором. A>Ваша правда, так не получится, а если чисто теоретически такое преобразование можно сделать?
Здравствуйте, ankorol, Вы писали:
R>>Не получится потому, что директивы #pragma обрабатываются еще до компиляции препроцессором.
A>Ваша правда, так не получится, а если чисто теоретически такое преобразование можно сделать?
Теоретически можно например во время компиляции заполнить статический массив char строкой, содержащей текстовое представление числовой константы времени компиляции. Практически это будет жутко замедлять компиляцию и вообще кажется смысла не имеет.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Тот кто сидит в пруду, Вы писали:
ТКС>Теоретически можно например во время компиляции заполнить статический массив char строкой, содержащей текстовое представление числовой константы времени компиляции. Практически это будет жутко замедлять компиляцию и вообще кажется смысла не имеет.
А можно пример кода.
Ну приминение можно придумать — например я хочу иметь для своей специализации шаблона
Здравствуйте, ankorol, Вы писали:
A>Здравствуйте, rg45, Вы писали:
R>>Не получится потому, что директивы #pragma обрабатываются еще до компиляции препроцессором.
A>Ваша правда, так не получится, а если чисто теоретически такое преобразование можно сделать?
Упрощенно, для иллюстрации идеи, ниже показано как это можно реализовать. Если сделать еще пару-тройку танцевальных движений с бубном, то можно обобщить реализацию на целочисленный тип произвольного размера и убрать не значашие нули в начале строки.
Здравствуйте, ankorol, Вы писали:
ТКС>>Теоретически можно например во время компиляции заполнить статический массив char строкой, содержащей текстовое представление числовой константы времени компиляции. Практически это будет жутко замедлять компиляцию и вообще кажется смысла не имеет.
A>А можно пример кода.
Давайте так: вы напишете 2 рекурсивную функция которая вычисляет n-й символ в строковом представлении целого числа, если n превышает длину строки — возвращает 0. А я ваш код в компайлтайм переведу
A>Ну приминение можно придумать — например я хочу иметь для своей специализации шаблона A>
A>template<int N>
A>{
A> static char *str_presentation;
A>}
A>
A>в str_presentation значени N что бы во время вывода на экран или еще куда-то время на перевод числа в строку.
Ну а что мешает в рантайме ее заполнить?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Спасибо! Супер! Мне нехватало этого шага с инициализацией строки символами через запятую, всё пытался конкатенировать строки. Танцевальные движения с бубном попробую сам придумать.
Здравствуйте, ankorol, Вы писали:
R>>Не получится потому, что директивы #pragma обрабатываются еще до компиляции препроцессором.
A>Ваша правда, так не получится, а если чисто теоретически такое преобразование можно сделать?
С точки зрения теории, по идее, нельзя.
Шаблоны допускает инициализацию только интегральных типов, куда ни string, ни char* не попадают.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
ТКС>Давайте так: вы напишете 2 рекурсивную функция которая вычисляет n-й символ в строковом представлении целого числа, если n превышает длину строки — возвращает 0. А я ваш код в компайлтайм переведу
rg45 уже написал не рекурсивную версию.
ТКС>Ну а что мешает в рантайме ее заполнить?
Ничто не мешает, это просто я себе придумал такое упражнение-извращение с шаблонами, ничего общего с реальной жизнью это не имеет.
И всё таки: берём boost::mpl::string (можно сделать собственную, упрощённую реализацию; также boost::mpl::push_front, boost::mpl::c_str, boost::mpl::empty) и boost::mpl::if_ (элементарно делается):
Здравствуйте, ankorol, Вы писали:
A>Спасибо! Супер! Мне нехватало этого шага с инициализацией строки символами через запятую, всё пытался конкатенировать строки. Танцевальные движения с бубном попробую сам придумать.
Интересно будет посмотреть конечную реализацию.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, ankorol, Вы писали:
ТКС>>Давайте так: вы напишете 2 рекурсивную функция которая вычисляет n-й символ в строковом представлении целого числа, если n превышает длину строки — возвращает 0. А я ваш код в компайлтайм переведу
A>rg45 уже написал не рекурсивную версию.
Exp10 у него, естественно, рекурсивная. Не рекурсивно такие вещи на шаблонах не делаются.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Тот кто сидит в пруду, Вы писали:
ТКС>Exp10 у него, естественно, рекурсивная. Не рекурсивно такие вещи на шаблонах не делаются.
Ну это вспомогательный класс. Его тоже можно заполнить специализациями вручную до каких-то разумных приделов.
Но согласен очень много чего в метапрограммировании на С++ рекурсивное...