Clamp proposal
Closed this issue · 4 comments
Раз PR вы не принимаете, оформлю как issue.
Сделайте в namespace NeoML
себе что-то такое и перестаньте писать многоэтажные сравнения:
#if __cplusplus >= 201703L
using std::clamp;
#else
template<typename T, typename Compare = std::less<T>> constexpr const T& clamp(const T &v, const T &lo, const T &hi, Compare comp = Compare()) {
return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}
#endif
Идея хорошая, но где именно нашлось столько многоэтажных сравнений?
Просто по некоторым причинам нам лучше минимизировать использование std::
вне NeoMathEngine
.
neoml/NeoOnnx/src/AttributeGetters.h
Lines 62 to 68 in 5189ed0
neoml/NeoOnnx/src/AttributeGetters.h
Lines 90 to 96 in 5189ed0
neoml/NeoOnnx/src/TensorUtils.h
Lines 41 to 47 in 5189ed0
neoml/NeoOnnx/src/TensorUtils.h
Lines 116 to 122 in 5189ed0
Бонус:
neoml/NeoOnnx/src/TensorUtils.h
Lines 102 to 106 in 5189ed0
Это - std::min
Любопытно, бОльшая часть STL это headers-only шаблоны, т.е. runtime-зависимости они не добавляют или у вас есть платформы где есть C++ компилятор но нет стандартной библиотеки? Поделитесь печалью.
P.S. Нет бога кроме С++ без STL и Страуструп - пророк его.
Можете переизобрести "велосипед" std::less
и получится обойтись без std::
...
Причиной, по некоторым причинам, предпочту не делиться)
Но в NeoOnnx думаю можно добавить clamp
даже с std::