Re[2]: std::optional ~ как value-параметр шаблона
От: Sm0ke Россия ksi
Дата: 08.08.23 13:02
Оценка: 105 (1)
Здравствуйте, Chorkov, Вы писали:

C>Я бы использовал auto — параметр шаблона:


C>
C>template <auto Size>
C>struct omg {
C>    static_assert(( std::is_convertible_v<decltype(Size), std::optional<std::size_t> > ));
C>    static constexpr std::optional<std::size_t> size={Size}; // используем так, как хотели бы использовать параметр шаблона.
  
C>    //...
C>};

C>omg<123> a;
C>omg<std::nullopt> b;

C>


Даже лучше предыдущего reply-я с вариадиком, т:к таких параметров может быть несколько.
Переделал на концепт:

#include <cstddef>
#include <type_traits>
#include <optional>

template <typename T, typename ... U>
concept c_any_of = (std::is_same_v<T, U> || ...);

template <c_any_of<std::size_t, std::nullopt_t> auto Size>
struct omg {};

int main() {
  omg<std::nullopt> var1;
  omg<10zu> var2;
  return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.