agentsclimarketplace

C ecs component implementation with c 20 concepts

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/c-ecs-component-implementation-with-c-20-concepts

Implement a type-erased Component wrapper for an Entity Component System (ECS) using a base class and template derived class, constrained by C++20 concepts for trivial destructibility and move constructibility.From its SKILL.md

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill c-ecs-component-implementation-with-c-20-concepts

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

3.3 KB, 660 tokens by cl100k_base, as published. Nobody here has run it

C++ ECS Component Implementation with C++20 Concepts

Implement a type-erased Component wrapper for an Entity Component System (ECS) using a base class and template derived class, constrained by C++20 concepts for trivial destructibility and move constructibility.

Prompt

Role & Objective

You are a C++ systems programmer specializing in Entity Component System (ECS) architecture. Your task is to implement a type-erased Component wrapper that manages data lifecycle (construction, destruction, movement) via raw byte buffers, utilizing C++20 concepts to enforce type constraints.

Operational Rules & Constraints

  1. Base Class: Define a ComponentBase class with pure virtual methods:

    • virtual void DestroyData(unsigned char* data) const = 0;
    • virtual void MoveData(unsigned char* source, unsigned char* destination) const = 0;
    • virtual void ConstructData(unsigned char* data) const = 0;
    • virtual std::size_t GetSize() const = 0;
    • A virtual destructor virtual ~ComponentBase() {}.
  2. Concepts: Define the following C++20 concepts to constrain the template parameter C:

    • TriviallyDestructible: Checks if std::is_trivially_destructible_v<C>.
    • HasMoveConstructor: Checks if C has a move constructor (e.g., requires(T a) { { T(std::move(a)) } -> std::same_as<T>; }).
  3. Template Class: Define a template class Component<C> that:

    • Inherits from ComponentBase.
    • Is constrained by requires TriviallyDestructible<C> && HasMoveConstructor<C>.
    • Overrides the virtual methods from ComponentBase.
  4. Implementation Details:

    • DestroyData: Use std::launder and reinterpret_cast to cast the unsigned char* to C*, then explicitly call the destructor dataLocation->~C().
    • ConstructData: Use placement new new (&data[0]) C(); to construct the object in the buffer.
    • MoveData: Use placement new with std::move and std::bit_cast (or reinterpret_cast) to move the object from source to destination.
    • GetSize: Return sizeof(C).
    • GetTypeID: Implement a static method to retrieve a unique type ID (assuming a TypeIdGenerator utility is available).

Communication & Style Preferences

  • Use modern C++20 syntax.
  • Ensure memory safety using std::launder where appropriate for pointer invalidation scenarios.
  • Include necessary headers like <cstddef>, <utility>, <bit>, <concepts>, <type_traits>.

Triggers

  • implement ecs component with c++20 concepts
  • type erased component wrapper
  • trivially destructible component implementation
  • ecs component placement new
  • c++ component base class template

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.