Постироничные идеи для ебаного C++
321 subscribers
51 photos
1 video
2 files
20 links
Download Telegram
template <ObjectLike O, ClassLike C, typename... Args>
[[nodiscard]] util::Ptr<O> UnsafeNew(util::Ptr<C> object_class, Args&&... args) {
if constexpr (std::is_same_v<O, Struct>) {
auto new_object = util::MakePtr<Struct>(object_class);
auto it = util::As<StructClass>(object_class)->GetFields().begin();
(
[&it, &args, &new_object] {
auto class_ = *it++;
if (util::Is<StructClass>(class_)) {
new_object->AddFieldValue(
UnsafeNew<Struct>(util::As<StructClass>(class_), args));
} else if (util::Is<StringClass>(class_)) {
if constexpr (std::is_convertible_v<decltype(args), std::string_view>) {
new_object->AddFieldValue(
UnsafeNew<String>(util::As<StringClass>(class_), args));
}
} else {
if constexpr (!std::is_convertible_v<std::remove_reference_t<decltype(args)>,
std::string_view>) {
#define DDB_ADD_PRIMITIVE(P) \
else if (util::Is<PrimitiveClass<P>>(class_)) { \
new_object->AddFieldValue( \
UnsafeNew<Primitive<P>>(util::As<PrimitiveClass<P>>(class_), args)); \
}

if (false) {
}
DDB_PRIMITIVE_GENERATOR(DDB_ADD_PRIMITIVE)
#undef DDB_ADD_PRIMITIVE
}
}
}(),
...);
return new_object;
} else if constexpr (std::is_same_v<O, String>) {
return util::MakePtr<String>(object_class, std::move(std::get<0>(std::tuple(args...))));
} else {
return util::MakePtr<O>(object_class, std::get<0>(std::tuple(args...)));
}
throw error::TypeError("Can't create object");
}
🥱5🤔1
Forwarded from Maxim
Почему-то этот кусок кода выдает ошибку
In template: no matching function for call to 'construct_at' error occurred here in instantiation of function template specialization 'std::_Construct<BrickWall, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const float &>' requested here in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::construct<BrickWall, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, c... in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<BrickWall, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const... in instantiation of function template specialization 'std::__shared_count<__gnu_cxx::_S_atomic>::__shared_count<BrickWall, std::allocator<void>, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float... in instantiation of function template specialization 'std::__shared_ptr<BrickWall, __gnu_cxx::_S_atomic>::__shared_ptr<std::allocator<void>, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, gl... in instantiation of function template specialization 'std::shared_ptr<BrickWall>::shared_ptr<std::allocator<void>, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const ... in instantiation of function template specialization 'std::make_shared<BrickWall, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const float &>' requested here candidate template ignored: substitution failure [with _Tp = BrickWall, _Args = <BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const float &>]: allocating an object of...

return std::make_shared<BrickWall>(BrickWall::WallType::Right, position, scale, rotation);

BrickWall(const WallType wallType, const glm::vec2 &position, const glm::vec2 &scale, const float rotation);
Какой вариант корректно удалит все элементы из STL map

// a
for(auto i = map.begin(); i != map.end(); ++i) {
map.erase(i);
}

// b
for(auto i = map.begin(); i != map.end(); i++) {
map.erase(i);
}

// c
for(auto i = map.begin(); i != map.end(); ) {
map.erase(++i);
}

// d
for(auto i = map.begin(); i != map.end(); ) {
map.erase(i++);
}
greg
Photo
Спасибо студентам курса Алгоритмы и Структуры данных Весна 2024 ПИиКТ ИТМО за контент в паблик.
Forwarded from Stepan
std::iota::poebota::rangers::ranges
🔥9
помогите пофиксить
malloc(std::chrno::milliseconds(200).detach());
😁42
int plus(int a, int b);
int minus(int a, int b);

int plus(int a, int b){
if(a<0 && b>0) return minus(b, -a);
if(b<0 && a>0) return minus(a, -b);
if(a<0 && b<0) return -plus(-a, -b);
if(a==0) return b;
if(b==0) return a;
return plus(a-1, b-1)+2;
}
int minus(int a, int b){
if(a<0 && b>0) return -plus(-a, b);
if(b<0 && a>0) return plus(a, -b);
if(a<0 && b<0) return -minus(-a, -b);
if(a==0) return -b;
if(b==0) return a;
return minus(a-1, b-1);
}
🔥1
Теперь это канал про C++
👍2👎2