Я пишу некоторый универсальный код, который по-разному обрабатывает выражение Eigen для тех, которые хранят непрерывные данные в памяти, а те - нет.
Я знаю, что во время выполнения это можно сделать, установив expr.innerSize() == expr.outerStride() && expr.innerStride() == 1
, но мне было интересно, можно ли это сделать во время компиляции?
== Редактировать ==
Цель этой проверки - разрешить выполнение следующего в общем коде выражения xpr
:
// c++20
if (is_linear_accessible(xpr.data(), size)) {
auto buffer = std::span(xpr.data(), size);
// work with buffer safely
// ...
} else {
auto tmp = xpr.eval();
// work with tmp.data()
// ...
}
Таким образом, я могу передавать данные в другие библиотеки, работающие с необработанным буфером. Как отметил @JaMiT, поскольку он включает информацию времени выполнения, это можно сделать только во время выполнения, но я хотел бы использовать как можно больше информации времени компиляции для «краткого описания» процесса.