Учебники и введение в шаблоны выражений C ++ - PullRequest
10 голосов
/ 27 марта 2010

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

Я нашел оригинальную статью Тодда Велдхейзена и пример из книги Josuttis C ++ Templates и статью Kreft & Langer . Это упомянуто в лекции 6 курса по Modern C ++ , ссылаясь на Josuttis. Библиотека POOMA background прекрасно вводит шаблоны выражений.

Я ищу простых , четких экспозиций.

Ответы [ 6 ]

7 голосов
/ 15 июля 2011

Я нашел Демистифицированные шаблоны выражений достаточно хорошо объясненными. Он начинается с демонстрации того, как реализовать математические выражения без шаблонов, и показывает основные строительные блоки и концепции.

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

IMO, статья является хорошей альтернативой главе шаблона выражения в «C ++ Templates: The Complete Guide».

5 голосов
/ 27 марта 2010

Вы должны получить копию Шаблоны C ++: Полное руководство .

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

2 голосов
/ 04 мая 2011

Я настоятельно рекомендую поискать в библиотеке Эрика Ниблера Boost.Proto. Более тонкие вводные материалы можно найти на C ++ - далее:

http://cpp -next.com / Архив / 2010/08 / экспрессивно-с-введение /

и его выступление на boost'con 2010 также очень интересно

0 голосов
/ 21 января 2013

для того, что вы хотите сделать, вы должны взглянуть на код Boost.ublas , поскольку он делает именно это.

Начните с файла vector.hpp, а затем вернитесь в иерархию (родители vector<>). Матрицы немного сложнее, но механизм тот же.

Теперь я могу посоветовать не пытаться воспроизвести сложность библиотеки в качестве первой попытки, например ublas_expression и тому подобное. Вы можете сделать это проще, сделав тип базовым объектом, а затем реализуйте бинарный оператор.

Смотри и здесь: http://www.bnikolic.co.uk/blog/cpp-expression-minimal.html

0 голосов
/ 27 марта 2010

Я предлагаю рассмотреть операторы повышения в Операторы повышения - Арифметика . Это шаблонные методы, расширяющие фундаментальные арифметические операции и операции сравнения.

0 голосов
/ 27 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...