Шаблоны выражения C++

Я в настоящее время использую C для числовых вычислений. Я услышал, что использование Шаблонов Выражения C++ лучше для научных вычислений. Что такое Шаблоны Выражения C++ простыми словами?

  1. Есть ли книги вокруг этого, обсуждают числовые методы/вычисления с помощью Шаблонов Выражения C++?

  2. Каким образом, Шаблоны Выражения C++ лучше, чем использование чистого C?

7
задан Trevor Hickey 19 July 2015 в 21:47
поделиться

3 ответа

Простыми словами, что такое шаблоны выражений C ++?

Шаблоны выражений - это категория метапрограммирования шаблонов C ++, которая откладывает оценку подвыражений до тех пор, пока не станет известно полное выражение, чтобы можно было применить оптимизацию (особенно устранение временных ограничений).

Существуют ли книги, в которых обсуждаются численные методы / вычисления с использованием шаблонов выражений C ++?

Я считаю, что инопланетяне были изобретены Тоддом Велдхуизеном, который опубликовал статью об этом 15 лет назад. (Похоже, что многие старые ссылки на него уже мертвы, но в настоящее время здесь является его версией.) Некоторые материалы об этом есть в C ++ Templates: The Complete Путеводитель .

Чем шаблоны выражений C ++ лучше, чем использование чистого C?

Они позволяют писать код выразительным высокоуровневым способом без потери производительности. Например,

void f(const my_array<double> a1, const my_array<double> a2) 
{ 
  my_array<double> a3 = 1.2 * a1 + a1 * a2; 
  // ..
}

можно оптимизировать полностью до

for( my_array<double>::size_type idx=0; idx<a1.size(); ++idx ) 
  a3[idx] = 1.2*a1[idx] + a1[idx]*a2[idx]; 

, что быстрее, но труднее для понимания.

11
ответ дан 6 December 2019 в 11:47
поделиться

В старом добром архиве Flipcode есть хорошая статья по математике шаблонов C ++ (несомненно, возвращает воспоминания):

http: // www.flipcode.com/archives/Faster_Vector_Math_Using_Templates.shtml

3
ответ дан 6 December 2019 в 11:47
поделиться

Добавляя к ответу sbi, шаблоны выражений реализуют высокоуровневую оптимизацию глазка с использованием шаблонов для сопоставления и синтеза с образцом.

Они также добавляют синтаксический сахар или делают ваш код более читабельным, позволяя вам определять алгоритм в терминах простых операций. Итак, в данном случае простота и элегантность достигаются за счет оптимизации с помощью метапрограммирования. По крайней мере, если все делать правильно.

3
ответ дан 6 December 2019 в 11:47
поделиться