Я использую мета-программирование некоторых шаблонов для решения небольшой проблемы, но синтаксис немного раздражает - поэтому мне было интересно, что в приведенном ниже примере будут перегружены операторы на мета- класс, который имеет пустой конструктор, вызывает ограничение производительности (времени выполнения)? Будут ли созданы все временные периоды или можно предположить, что они будут оптимизированы?Перегрузка операторов с помощью шаблонов метапрограммирования C++
template<int value_>
struct Int {
static const int value = value_;
template<typename B>
struct Add : public Int<value + B::value> { };
template<typename B>
Int<value + B::value> operator+(B const&) { return Int<value + B::value>(); }
};
int main()
{
// Is doing this:
int sum = Int<1>::Add<Int<2> >().value;
// any more efficient (at runtime) than this:
int sum = (Int<1>() + Int<2>()).value;
return sum;
}
'Int <1> :: Добавить>(). Значение' может быть переписано как' Int <1> :: Добавить > :: значение'. –
Nawaz
Ох. Кажется, я создаю [шаблоны выражения] (http://stackoverflow.com/a/2598596/21475), даже не зная об этом. Кажется, оптимизаторы очень хорошо справляются с такими вещами! – Cameron
@Nawaz: Вы правы, конечно, это артефакт дизайна моего реального кода (который в конечном итоге нуждается в экземпляре во время выполнения). – Cameron