Re[51]: Оставаться в С++ или уходить?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 17.08.22 04:07
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Кстати, буст там не используют.


А это что?

M>И вообще, плюсы там довольно консервативно используют, Александреску-стайл шаблоны противопоказаны


Такие шаблоны в принципе писать уже не надо, они были нужны до С++11. Но потыкал в произвольные места: например:
template <typename T>
using WritableResult =
    decltype(Write(std::declval<Writer&>(), std::declval<const T&>()));

template <typename T>
using ReadableResult = decltype(Read(std::declval<Reader&>(), To<T>{}));

}  // namespace impl

/// Check if `writer.Write(T)` is available
template <typename T>
inline constexpr bool kIsWritable =
    std::is_same_v<meta::DetectedType<impl::WritableResult, T>, void>;

/// Check if `reader.Read<T>()` is available
template <typename T>
inline constexpr bool kIsReadable =
    std::is_same_v<meta::DetectedType<impl::ReadableResult, T>,
                   std::remove_const_t<T>>;

/// Check if `T` is both writable and readable
template <typename T>
inline constexpr bool kIsDumpable = kIsWritable<T>&& kIsReadable<T>;

template <typename T>
constexpr bool CheckDumpable() {
  static_assert(
      kIsDumpable<T>,
      "Type is not dumpable. Probably you forgot to include "
      "<userver/dump/common.hpp>, <userver/dump/common_containers.hpp> or "
      "other headers with Read and Write declarations");

  return true;
}


Я бы не назвал этот код консервативным.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.