xcal
基于 C++23 的现代图形渲染引擎
载入中...
搜索中...
未找到
concepts.h
浏览该文件的文档.
1// mathconcepts.h
2#pragma once
3#ifndef MATHCONCEPTS_H
4#define MATHCONCEPTS_H
5#include <concepts>
6
7namespace xcmath {
8namespace concepts {
9template <typename _Tp1, typename _Tp2 = _Tp1, typename _RTp = _Tp1>
10concept Add = requires(_Tp1 a, _Tp2 b) {
11 { a + b } -> std::same_as<_RTp>;
12};
13template <typename _Tp1, typename _Tp2 = _Tp1, typename _RTp = _Tp1>
14concept Subtract = requires(_Tp1 a, _Tp2 b) {
15 { a - b } -> std::same_as<_RTp>;
16};
17template <typename _Tp1, typename _Tp2 = _Tp1, typename _RTp = _Tp1>
18concept Muitiply = requires(_Tp1 a, _Tp2 b) {
19 { a* b } -> std::same_as<_RTp>;
20};
21template <typename _Tp1, typename _Tp2 = _Tp1, typename _RTp = _Tp1>
22concept Divide = requires(_Tp1 a, _Tp2 b) {
23 { a / b } -> std::same_as<_RTp>;
24};
25template <typename _Tp1, typename _RTp = _Tp1>
26concept Minus = requires(_Tp1 a) {
27 { -a } -> std::same_as<_RTp>;
28};
29template <typename _Tp1, typename _RTp = _Tp1>
30concept Sqrt = requires(_Tp1 x) {
31 { sqrt(x) } -> std::same_as<_RTp>;
32};
33template <typename Tp1, typename Tp2>
34concept lt = requires(Tp1 a, Tp2 b) {
35 { a < b } -> std::same_as<bool>;
36};
37template <typename Tp1, typename Tp2>
38concept le = requires(Tp1 a, Tp2 b) {
39 { a <= b } -> std::same_as<bool>;
40};
41template <typename Tp1, typename Tp2>
42concept gt = requires(Tp1 a, Tp2 b) {
43 { a > b } -> std::same_as<bool>;
44};
45template <typename Tp1, typename Tp2>
46concept ge = requires(Tp1 a, Tp2 b) {
47 { a > b } -> std::same_as<bool>;
48};
49template <typename Tp1, typename Tp2>
50concept eq = requires(Tp1 a, Tp2 b) {
51 { a == b } -> std::same_as<bool>;
52};
53template <typename Tp1, typename Tp2>
54concept ne = requires(Tp1 a, Tp2 b) {
55 { a != b } -> std::same_as<bool>;
56};
57template <typename Tp1, typename Tp2>
58concept lg = requires(Tp1 a, Tp2 b) {
59 { a <= b } -> std::same_as<bool>;
60};
61template <typename Tp1, typename Tp2>
62concept Compare = requires(Tp1 a, Tp2 b) {
63 { a < b } -> std::same_as<bool>;
64 { a <= b } -> std::same_as<bool>;
65 { a > b } -> std::same_as<bool>;
66 { a >= b } -> std::same_as<bool>;
67 { a == b } -> std::same_as<bool>;
68 { a != b } -> std::same_as<bool>;
69};
70template <typename _Tp1, typename _RTp = _Tp1>
71concept PrefixPlusPlus = requires(_Tp1 a) {
72 { ++a } -> std::same_as<_RTp>;
73};
74template <typename _Tp1, typename _RTp = _Tp1>
75concept PostfixMinusMinus = requires(_Tp1 a) {
76 { --a } -> std::same_as<_RTp>;
77};
78template <typename _Tp1, typename _RTp = _Tp1>
79concept SurfixPlusPlus = requires(_Tp1 a) {
80 { ++a } -> std::same_as<_RTp>;
81};
82template <typename _Tp1, typename _RTp = _Tp1>
83concept SurfixMinusMinus = requires(_Tp1 a) {
84 { --a } -> std::same_as<_RTp>;
85};
86}; // namespace concepts
87
88} // namespace xcmath
89
90#endif // MATHCONCEPTS_H
Compiler-specific type information handling for MSVC
Definition complex.hpp:12