У меня есть следующее примерное использование auto в параметрах шаблона (которое мне нравится независимо от их здравомыслия или наличия лучших альтернатив, я просто пытаюсь внедрить функцию 'auto in template params'):
//1-Check if input is within open interval (l, h) where l & h are function parameters
//Example: int x = 5, y = fnc_y(), z = fnc_z(); auto fOk = gt_lt(z, x, y);
template<typename L, typename H, typename V> inline bool
gt_lt(const V &v, const L& l, const H& h) { return (v > l) && (v < h); }
//2-Check if input is within open interval (l, h) where l & h are auto template parameters
//Example: int z = fnc_z(); auto fOk = gt_lt<5, 45>(z);
template<auto l, auto h, typename V>
inline bool gt_lt(const V &v) { return (v > l) && (v < h); }
//3-Fill a C array (a) of known size with a value where a is a function parameter:
// char a[4]; fill_all(a, 'a');
template<typename TArrayValType, size_t N, typename TVal>
inline void fill_all(TArrayValType(&a)[N], const TVal &v) { std::fill(a, a + N, v); }
//4-Fill a C array (a) of known size with a value where a is an auto template parameter
//Can't figure out it!!! Goal: char a[4]; fill_all<a>('a');
template<auto a, **....what else to put it here?**, typename TVal>
inline void fill_all(const TVal &v) { std::fill(a, a + N, v); }
Использование № 4 не работает.Как заставить это работать?Я подозреваю, что что-то вроде Извлечение значения SIZE без знания его типа будет работать, но все равно не сможет заставить его работать ...
Одной из причин такого использования было бы избежатьПередача некоторых значений (когда они известны во время компиляции) в качестве параметров функции даже в режиме отладки для лучшей производительности отладки, или, надеюсь, иногда это полезно в полностью оптимизированных сборках в случаях, когда компиляция генерирует еще более эффективный код, если избежать передачи параметров, благодаряАвто для нетиповых параметров.Но, тем не менее, я все еще не уверен, имеет ли это смысл ...