Описание тега expression-templates

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

Как написать сторонний библиотечный класс-оболочку вокруг шаблонов выражений

Мы пытаемся внедрить новый код C++ в моей исследовательской группе для выполнения большого численного моделирования (конечные элементы, методы конечных разностей, оптимизация топологии и т. Д.). Программное обеспечение будет использоваться людьми из…
10 мар '15 в 16:09
2 ответа

Почему игры не используют шаблоны выражений для математики?

Я могу представить, что шаблоны выражений делают ужасные вещи, чтобы компилировать время для таких распространенных вещей, как векторы / матрицы / кватернионы и т. Д., Но если это такой большой прирост скорости, почему игры не используют его? Соверш…
2 ответа

Запретить привязку шаблонов выражений к ссылкам rvalue

Я понимаю, что делаю что-то вроде следующего: auto&& x = Matrix1() + Matrix2() + Matrix3(); std::cout << x(2,3) << std::endl; Будет вызывать тихую ошибку времени выполнения, если матричные операции используют шаблоны выражений (т…
02 мар '12 в 04:06
2 ответа

Шаблоны выражений и ранжирование на основе в C++11

Насколько я понимаю, шаблоны выражений будут разбиты на ранжированные в C++11, так как for (auto x : expr) имеет неявное auto&& __range = expr в этом, и это приведет к висящим ссылкам. Есть ли способ создать классы шаблонов выражений так, чт…
01 мар '12 в 01:51
2 ответа

Проблема перегрузки оператора шаблона выражения с помощью std::vector

В настоящее время я работаю над числовой библиотекой, которая использует шаблоны выражений. К сожалению, я столкнулся с проблемой перегрузки моего оператора. Рассмотрим следующий урезанный пример. #include <vector> namespace test { class test …
1 ответ

Шаблоны выражений и рукописный код

В настоящее время я пишу библиотеку выражений шаблонов C++ и сравниваю некоторые экземпляры с рукописным кодом на уровне сборки. Рукописная функция заключается в следующем: spinor multiply(vector const& a, vector const& b) { spinor result = …
22 мар '12 в 11:33
1 ответ

Шаблоны выражений не работают для перегрузок примитивного типа при clang

У меня есть базовый класс CRTP следующим образом: template<typename Derived, size_t DIMS> class Base { public: // here is I think where the problem is inline const Derived& self() const {return *static_cast<const Derived*>(this);} };…
25 май '16 в 15:09
1 ответ

Boost.Proto: возможно ли для преобразований Proto оценить смешанное выражение матрицы и вектора?

Теперь я пытаюсь научить линейную алгебру компилятора g++, чтобы g++ мог переписать такое выражение, как (matrix * vector)(index) как цикл для оценки выражения. В основном это то, что я ожидаю в качестве следующей статьи последней статьи в серии " E…
02 окт '15 в 05:56
1 ответ

Шаблон выражения с CRTP в качестве lvalue

Я пишу библиотеку, которая использует шаблоны выражений с CRTP. Исходные файлы можно найти здесь: https://github.com/mspraggs/pyQCD/tree/master/lib/include/base Шаблоны выражений основаны на примере, приведенном в статье Википедии на эту тему. Я пер…
31 июл '14 в 16:56
2 ответа

C++ Принудительное неявное преобразование при передаче в качестве аргумента.

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

Шаблоны выражений: ошибка C2784 "Не удалось вывести аргумент шаблона"

Я работаю над векторным классом, который использует шаблоны выражений. У меня есть следующий (сокращенный) код. В "Vector.h": #include <cmath> #include <iostream> #include <limits> #include <type_traits> #define NULLVAL(a) (*…
1 ответ

Приведение из Eigen::CwiseBinaryOp к MatrixXd вызывает segfault

Я пишу библиотеку, в которой шаблоны Eigen-выражений хранятся как переменные-члены для выполнения сложных вычислений, необходимых для этого. Тем не менее, похоже, что я не могу сохранить или вернуть эти шаблоны выражений, если они не конвертированы …
1 ответ

Как оценить выражение при объявлении переменной (в шаблонах выражений)

Я пытаюсь изучить шаблоны выражений в C++. Я пытаюсь создать класс для трехмерного вектора (в основном, вектор размером 3) для хранения координат, пространственных векторов, сил и т. Д., Которые в основном состоят из трех компонентов. До сих пор я р…
13 мар '15 в 04:40
2 ответа

Промежуточные результаты с использованием шаблонов выражений

В C++. Метапрограммирование шаблонов: концепции, инструменты и методы Boost и Beyond ... Одним из недостатков шаблонов выражений является то, что они имеют тенденцию поощрять написание больших и сложных выражений, потому что оценка задерживается тол…
03 ноя '09 в 09:19
2 ответа

Перегрузка функций C++, шаблоны выражений и пространство имен

Я разрабатываю инструмент автоматического дифференцирования на основе шаблонов выражений и перегрузки операторов / функций. Например, функция std::max шаблона была успешно перегружена: namespace ead { ... template<class A> struct ExprWrap { in…
1 ответ

Вложенный std::forward_as_tuple и ошибка сегментации

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

Аргументы функции шаблона не выполняют никаких неявных преобразований.

По какой-то странной причине я не могу получить аргументы шаблона в этом фрагменте кода для неявного приведения к совместимому типу. #include <type_traits> template <typename T, unsigned D> struct vec; template <> struct vec<flo…
0 ответов

Задержка оценки выражения с использованием std::future

У меня есть класс под названием Expr который использует методологию шаблонов выражений, которую можно использовать для построения выражений, подобных этому: Expr<int,Mat<int>> v(Mat<int>(10,10)); v(0,0)*3 + v(2,1)*v(1,2) >> v…
18 мар '17 в 00:51
1 ответ

Реализация оператора присваивания для класса строк в матричной библиотеке, которая использует шаблоны выражений

Предположим, у нас есть matrix Класс, который использует шаблоны выражений так, что прокси-объекты используются, чтобы позволить компилятору оптимизировать составные выражения. Теперь вполне естественно создать row класс следующей формы: namespace d…
19 апр '17 в 21:12
0 ответов

Как обрабатывать составные операторы / побочные эффекты в шаблонах выражений

При реализации шаблонов выражений для типа вектор / массив я неизбежно дошел до того, что мне нужно предоставить operator +=, Использование схемы шаблона выражения "по умолчанию" дает неинтуитивные результаты. Выражение a += b не возвращает результа…
16 ноя '16 в 08:43