b707
25.Январь.2023 13:10:09
1
Странного хочу.
Возможно ли, чтобы нетипизованный параметр шаблона был использован в дефайне условной компиляции?
как-то так:
template<int A>
class D: public C
{
public:
D() { ....}
#if A >3
.... code 1
#else
..... code 2
#endif
};
Ведь казалось бы, ограничений никаких быть не должно - параметр шаблона уже известен при компиляции, что мешает выбрать нужный кусок кода?
Но не работает так.
rkit
25.Январь.2023 13:13:41
2
Есть порядок обработки. Препроцессор обрабатывается первым.
А эта конкретная задача делается с помощью if constexpr.
b707
25.Январь.2023 13:21:33
3
template<int A>
class D: public C
{
public:
if constexpr (A >3)
.... code 1
else
..... code 2
};
так?
Но для этого нужен С++17, а его в ардуино нет.
Не говоря уж о том, что if constexpr (A >3)
- это условие времени выполнения, а хочу условие времени компиляции.
нет. constexpr как раз во время компиляции действует. (Если то, от чего он зависит, тоже обьявлено как constexpr)
b707
25.Январь.2023 13:31:25
6
нет… мне кажется
По крайней мере вот такое написать нельзя - будет повторное определение метода:
template<int A>
class D: public C
{
public:
if constexpr (A >3)
void method() { ..... }
else
void method() { ..... }
};
А с условной компиляций такое бы прошло.
Счас Петрович проснецца, расскажет.
Но, то, что constexpr ДОЛЖЕН быть известен во время компиляции, и никаким образом не меняться в коде - это прям точно, 146%
b707
25.Январь.2023 13:40:08
8
Так кто ж с этим спорит?
Вопрос-то в том, что в случае с условной компиляцией компилируется только одна ветка выбора, в случае с constexpr - обе.
Конечно, можно написать вот так:
void method() {
if constexpr (A >3)
....
else
...
}
и надеятся, что оптимизатор ненужное выкинет, но это совсем не то
rkit
25.Январь.2023 13:50:58
9
может прочитаешь документацию, все-таки?
Петровича надо спрашивать тогда. Я в if еще ни разу constexpr не пользовал.
b707
25.Январь.2023 13:55:29
11
он молчит. Похоже неспроста…
Думаю, все же придется самому документацию читать
еще rkit знает, но его спрашивать, как взывать к Богу Ветра.
1 лайк
ua6em
25.Январь.2023 14:15:32
13
DetSimen:
взывать к Богу Ветра.
посеешь ветер пожнёшь бурю?
b707:
он молчит
А чё мне говорить-то? В тот момент, когда только просыпается работа с шаблонами, все дефайны давно уже обработаны.
17-ый С++ вполне себе работает в IDE, я тока им и пользуюсь.
Но всё это уже и без меня было сказано.
Если уж мне надо чёт-то сказать, могу рассказать, как мы сегодня дискутировали что такое Китай. Было трое парней и я с ними.
Китай - это алиэкспресс
Китай - это конфуцианство
Китай - это мракобесие и жестокость
Но тут вмешался великий я, такой весь небритый и сказал, что Китай - это вот эта девочка .
На том спор и закончился. Не то, чтобы они со мною согласились, но я ушёл на перекур, а они остались глазеть видео
b707
25.Январь.2023 15:00:48
16
ушел от ответа
Эх вы, я то надеялся, что вы мне какие-то другие варианты предложите
Сижу читаю про SFINAE, по-моему это может частично решить мою задачу.
ЗЫ у девочки ноги полноваты… на мой вкус юбку ей подлинее надо
b707
25.Январь.2023 15:08:06
18
она только одно умеет танцевать?
однако нет
Вот это по мне лучше - музыка мне ближе
v258
25.Январь.2023 15:32:28
19
Китайские девочки - те еще штучки
Не возрасту переборчивый, хотя…
b707:
юбку ей подлинее надо
может и по возрасту
1 лайк
ua6em
25.Январь.2023 15:49:34
20