Sleipnir C++ API
Loading...
Searching...
No Matches
concepts.hpp
1// Copyright (c) Sleipnir contributors
2
3#pragma once
4
5#include <concepts>
6#include <type_traits>
7
8#include <Eigen/Core>
9
10namespace slp {
11
12template <typename T>
13concept ScalarLike = requires(std::decay_t<T> t) {
14 t + 1.0;
15 t = 1.0;
16};
17
18template <typename T>
19concept SleipnirScalarLike = requires(std::decay_t<T> t) {
20 t + 1.0;
21 t = 1.0;
22 { t.value() } -> std::same_as<double>;
23};
24
25template <typename T>
27 std::derived_from<std::decay_t<T>, Eigen::MatrixBase<std::decay_t<T>>>;
28
29template <typename T>
30concept SleipnirMatrixLike = requires(std::decay_t<T> t, int rows, int cols) {
31 t.rows();
32 t.cols();
33 { t.value() } -> std::same_as<Eigen::MatrixXd>;
35
36template <typename T>
38
39template <typename T>
41
42} // namespace slp
Definition concepts.hpp:26
Definition concepts.hpp:40
Definition concepts.hpp:13
Definition concepts.hpp:30
Definition concepts.hpp:19
Definition concepts.hpp:37