10 Ağustos 2021 Salı

Deleted Function

Giriş
Deleted Constructor
Deleted Destructor
olabilir.
Ayrıca deleted generic function da olabilir.

Örnek
Şöyle yaparız
// API function
void api(void* p) {
  // ... 
}

// Special case for nullptr
inline void api(std::nullptr_t) {
  api((void*)nullptr);
}

// Everything else is disabled
template <class ...T>
void api(T&&... t) = delete;

int main() {
  int i = 0;
  void* p = &i;
  api(p); // Compiles
  // api(&i); // Doesn't compile
}

std::views::common metodu

Giriş
std::ranges::range tipinden olan değişkeni, STL Container gibi kullabilmeyi sağlar.
Örnek
Şöyle yaparız
template <std::ranges::range R>
auto to_vector(R&& r) {
    auto r_common = r | std::views::common;
    return std::vector(r_common.begin(), r_common.end());
}
Örnek
Şöyle yaparız
#include <cmath>
#include <numeric>
#include <ranges>
#include <utility>

template<typename Container>
auto mean_and_stddev(const Container& values)
{
  auto len = static_cast<double>(values.size());
  auto mean = std::accumulate(values.begin(), values.end(), 0.0) / len;
  auto sdv =                   // squared differences view
      values
      | std::views::transform([mean](auto d){ auto x = d - mean; return x*x; })
      | std::views::common;
  auto stddev = std::sqrt(std::accumulate(sdv.begin(), sdv.end(), 0.0) / len);
  return std::pair{ mean, stddev };
}