Я думаю, что это не упоминалось.
Шаблоны C ++ завершены по Тьюрингу и выполняют обработку во время компиляции.
Существует хорошо известный механизм шаблонов выражений , который допускает преобразования,
не из произвольного кода, но, по крайней мере, из подмножества операторов c ++.
Итак, представьте, что у вас есть 3 вектора по 1000 элементов, и вы должны выполнить:
(A + B + C)[0]
Вы можете захватить это дерево в шаблоне выражения и произвольно манипулировать им
во время компиляции.
С этим деревом во время компиляции вы можете преобразовать выражение.
Например, если это выражение означает A[0] + B[0] + C[0]
для вашего домена, вы можете
Избегайте нормальной обработки C ++, которая будет:
- Добавьте A и B, добавив 1000 элементов.
- Создайте временный результат для результата и добавьте 1000 элементов C.
- Индексируйте результат, чтобы получить первый элемент.
И заменить другим преобразованным деревом шаблонов выражений, которое делает:
- Захват А [0]
- Захват B [0]
- Захват C [0]
- Добавьте все 3 результата вместе, чтобы получить результат с + = избегая временных.
Думаю, он не лучше, чем шутка, но все же очень мощный.