Я хочу, чтобы код был включен в функцию, основанную на значении постоянной времени компиляции, но static_if не является конструкцией в C ++.
Так что я могу написать такие функции, как это
class TA {
public:
template<bool flag>
void func() {
if(flag)
a++;
}
int a;
};int main() {
TA a;
a.func<true>();
a.func<false>();
}
И я хочу иметь гарантию, что компилятор выполняет две функции. Один, где ‘if (flag) a ++’ компилируется в функцию, а другой — где его нет.
Возможно ли получить эту гарантию на основе стандарта C ++ 17, или я во власти поставщика компилятора?
Благодарю.
На самом деле, C ++ 17 включает в себя именно то, о чем вы спрашиваете — он называется if constexpr
,
Вы можете использовать его везде, где ваше условие может быть оценено во время компиляции (например, создание шаблона):
class TA {
public:
template<bool flag>
void func() {
if constexpr (flag)
a++;
}
int a;
};
Однако, как уже говорили другие, в этом примере вы вряд ли получите много, так как компилятор часто может оптимизировать подобные вещи.
Других решений пока нет …