Скомбинировать шаблоны и дефайны

Странного хочу.
Возможно ли, чтобы нетипизованный параметр шаблона был использован в дефайне условной компиляции?
как-то так:

template<int A>
class D: public C
{
public:
	D() { ....}
#if A >3
  .... code 1
#else
   ..... code 2
#endif
};

Ведь казалось бы, ограничений никаких быть не должно - параметр шаблона уже известен при компиляции, что мешает выбрать нужный кусок кода?
Но не работает так.

Есть порядок обработки. Препроцессор обрабатывается первым.
А эта конкретная задача делается с помощью if constexpr.

template<int A>
class D: public C
{
public:
	
 if constexpr (A >3)
  .... code 1
else
   ..... code 2

};

так?

Но для этого нужен С++17, а его в ардуино нет.

Не говоря уж о том, что if constexpr (A >3) - это условие времени выполнения, а хочу условие времени компиляции.

есть, если пастарацца

нет. constexpr как раз во время компиляции действует. (Если то, от чего он зависит, тоже обьявлено как constexpr)

нет… мне кажется

По крайней мере вот такое написать нельзя - будет повторное определение метода:

template<int A>
class D: public C
{
public:
	
 if constexpr (A >3)
    void method() { ..... }
else
   void method() { ..... }

};

А с условной компиляций такое бы прошло.

Счас Петрович проснецца, расскажет. :slight_smile:
Но, то, что constexpr ДОЛЖЕН быть известен во время компиляции, и никаким образом не меняться в коде - это прям точно, 146%

Так кто ж с этим спорит?

Вопрос-то в том, что в случае с условной компиляцией компилируется только одна ветка выбора, в случае с constexpr - обе.

Конечно, можно написать вот так:

void method() { 
   if constexpr (A >3)
      ....
   else
     ...
   }

и надеятся, что оптимизатор ненужное выкинет, но это совсем не то

может прочитаешь документацию, все-таки?

Петровича надо спрашивать тогда. Я в if еще ни разу constexpr не пользовал.

он молчит. Похоже неспроста…
Думаю, все же придется самому документацию читать :slight_smile:

еще rkit знает, но его спрашивать, как взывать к Богу Ветра.

1 лайк

посеешь ветер пожнёшь бурю?

А чё мне говорить-то? В тот момент, когда только просыпается работа с шаблонами, все дефайны давно уже обработаны.

17-ый С++ вполне себе работает в IDE, я тока им и пользуюсь.

Но всё это уже и без меня было сказано.

Если уж мне надо чёт-то сказать, могу рассказать, как мы сегодня дискутировали что такое Китай. Было трое парней и я с ними.

  1. Китай - это алиэкспресс
  2. Китай - это конфуцианство
  3. Китай - это мракобесие и жестокость

Но тут вмешался великий я, такой весь небритый и сказал, что Китай - это вот эта девочка.

На том спор и закончился. Не то, чтобы они со мною согласились, но я ушёл на перекур, а они остались глазеть видео :slight_smile:

ушел от ответа :slight_smile:

Эх вы, я то надеялся, что вы мне какие-то другие варианты предложите :slight_smile:

Сижу читаю про SFINAE, по-моему это может частично решить мою задачу.

ЗЫ у девочки ноги полноваты… на мой вкус :slight_smile: юбку ей подлинее надо

Ну, вот такой он - Китай :slight_smile:

1 лайк

она только одно умеет танцевать? :slight_smile:

однако нет
Вот это по мне лучше - музыка мне ближе

Китайские девочки - те еще штучки :slightly_smiling_face:

Не возрасту переборчивый, хотя…

может и по возрасту :sweat_smile:

1 лайк

Если это она жеж, то нисколько не полноваты