| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > инстанцировать шаблон случайным параметром |
| Автор: GoldFinch 17.3.2009, 17:15 | ||||||
| есть шаблон template<int x> inline void foo(); есть код №1 вида
где ??? - некоторый параметр которым инстанцируется foo каждая строчка foo<???>(); приводит к генерации в этом месте некоторого кода возможен другой вариант кода, №2
где на месте при каждого "вызова" bar неявно генерируется код foo задача такая - в каждом месте генерации инлайн кода foo, параметр шаблона foo должена быть случайным, соответственно должен быть сгенерирован случайный код этот "случайный" код желательно должен меняться не только от места вызова к месту вызова, но и от компиляции к компиляции. для этого перед компиляцией, сторонней утилитой можно генерить 1 случайную константу RAND_SEED пример решения для кода №1 средствами препроцессора
|
| Автор: mes 17.3.2009, 17:29 |
| нельзя ли вопрос немножко поконкретней сформулировать ? мысль вроде понял, но расплывчато. |
| Автор: vinter 17.3.2009, 18:04 |
| GoldFinch, ты все врага запутать хочешь? Добавлено через 1 минуту и 4 секунды а выбор у тебя не велик, __(LINE, DATE, TIME)__ |
| Автор: GoldFinch 17.3.2009, 18:59 |
| vinter, DATE, TIME наверное неподходят, т.к. они возвращают строковый литерал, а его во ремя компиляции не обработать mes, мысль такая. есть шаблон который принимает int генерит из этого int'а кусок инлайн кода, например такой template<int n> inline void nops() {__asm{nop};nops<n-1>();}; template<> inline void nops<0>() {}; надо в каждом месте где используется этот шаблон передать ему случайное число и при этом учесть ситуацию inline void bar() {nops<???>();}; так чтобы при каждом встраивании bar() использовались разные nops<> для этого bar наверное тоже надо делать шаблоном %) |
| Автор: vinter 17.3.2009, 19:59 |
а если использовать твои наработки с хешем? |
| Автор: GoldFinch 17.3.2009, 20:58 |
| vinter, проблема в том, что язык шаблонов - функциональный, там нет переменных и нельзя поменять их значение, поэтому там нельзя получить бесконечную последовательность чисел, рекурсивно меняя глобальную переменную но может какой-то способ есть %) mes, в msvc2008 компилится на ура, стандарт говорит что такое возможно (14.7 абзац 3) |
| Автор: mes 17.3.2009, 21:17 |
ага.. и gcc компилит .. не знал .. |
| Автор: Cтpaнник 17.3.2009, 21:54 |
| GoldFinch, не проще ли будет нарыть в Инете исходники метаморфов и посмотреть реализацию генератора? |
| Автор: GoldFinch 17.3.2009, 22:00 |
| Cтpaнник, не средствами С++ - сколько угодно реализаций, а вот средствами С++ я не видел поэтому мне интересно возможно ли такое или нет |
| Автор: vinter 17.3.2009, 22:03 |
там нет никакой частичной специализации. Частичная специализацию у ф-ий запрещена. |