- 1
- 2
- 3
bool isComputerOn() noexcept {
return true;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 116
+1
bool isComputerOn() noexcept {
return true;
}
Лицензия MIT. Пользуйтесь на здоровье
0
char (&getArray())[11] {
static char arr[] = "1234567890";
return arr;
}
Как вернуть массив из функции в C/C++
На самом деле нет: возвращается ссылка
0
class BasicData {
public:
virtual ~BasicData() = default;
virtual std::vector<std::byte> bytes() const = 0;
protected:
BasicData() = default; // <-- сабж
};
Я не знаю зачем (строчка 8), но походу шоб всякие дядьки не дергали что им не можно. spoiler: Только вот так или иначе не дернут.
0
for (const auto& item : items)
{
if (!item.isValid())
continue;
else
{
// 200 строк кода
}
}
Что делать с такими колегами?
+1
namespace detail
{
template <typename Function, typename Tuple, std::size_t... i>
void applyForEach(Function&& f, Tuple&& t, std::index_sequence<i...>)
{
(static_cast<void>(std::invoke(f, std::integral_constant<std::size_t, i>{}, std::get<i>(t))), ...);
}
} // namespace detail
template <typename Function, typename Tuple>
void applyForEach(Tuple&& tuple, Function&& function)
{
using Indexes = std::make_index_sequence<std::tuple_size_v<Tuple>>;
detail::applyForEach(std::forward<Function>(function), std::forward<Tuple>(tuple), Indexes{});
}
Строка 6. Мы тут сделали синтаксис для fold expression, только вам его не дадим: у вас документов нет.
Clang: https://wandbox.org/permlink/lNOFu1sOV9bA2LJF
GCC: https://wandbox.org/permlink/yqeiYHTgZOz9NkkJ
+1
#include <type_traits>
int main() { return std::is_assignable_v<int, int>; }
--> 0
WTF?
+2
#include <type_traits>
struct Foo {
void bar(int) const & {}
};
int main() {
using MethodPtr = decltype(&Foo::bar);
const MethodPtr arr[] = { &Foo::bar };
auto *ptr = &arr;
auto &ref = ptr;
static_assert(std::is_same_v<decltype(ref), void (Foo::* const (*&)[1])(int) const &>);
}
Магия указателей возведенная в степень магии массивов в степени магии ссылок.
https://wandbox.org/permlink/8DygQ6oocrEY1K1M
+2
#include <tuple>
#include <utility>
#include <array>
namespace detail {
template <typename... Types, std::size_t... Indexes>
auto make_array(const std::tuple<Types...> &t, std::index_sequence<Indexes...>) {
using Tuple = std::tuple<Types...>;
using ValueType = typename std::tuple_element<0, Tuple>::type;
return std::array<ValueType, sizeof...(Types)>{ std::get<Indexes>(t)... };
}
template <typename Value>
constexpr Value fib(std::size_t idx) {
switch (idx) {
case 0: return 1;
case 1: return 1;
default: return fib<Value>(idx - 1) + fib<Value>(idx - 1);
}
}
}
template <class... Args>
auto to_array(const std::tuple<Args...> &t) {
return detail::make_array(t, std::index_sequence_for<Args...>{});
}
template <typename Value, std::size_t size>
class Fibonacci {
public:
constexpr auto as_array() const { return to_array(as_tuple()); }
constexpr operator std::array<Value, size>() const { return as_array(); }
private:
template <std::size_t offset = 0>
constexpr auto as_tuple() const {
return std::tuple_cat(std::tuple{detail::fib<Value>(offset)}, as_tuple<offset + 1>());
}
template <>
constexpr auto as_tuple<size - 1>() const { return std::tuple{detail::fib<Value>(size - 1)}; }
};
int main() {
std::array a = Fibonacci<int, 10>().as_array();
return a[5];
}
По мотивам http://govnokod.ru/25401#comment460820. Правда на момент написания я прошляпил, что речь шла о "нельзя возвращать массив"ю
+4
struct Data { /* ... */ };
class Items {
void insert(Data&& data) {
_storage.emplace_back(std::forward<Data>(data));
}
private:
std::vector<Data> _storage;
};
Dumb luck. Nuff said.
+2
struct ApplyFunctor {
template <typename Rules, typename ... Args>
bool operator()(const Rules &rules, Args && ... args) const {
for (const auto &rule : rules) {
if (!rule.apply(std::forward<Args>(args)...))
return false;
}
return true;
}
};
Perfect forwarding, сцуко, такой perfect. Но все же не заменяет мозг.