C++ component API

Bir C++ Pipelogic bileşeni, component.yml artı src/main.cpp'dir. YAML, platforma dönük girişleri, çıkışları, config'i, dosyaları ve build ayarlarını bildirir; main.cpp, bileşen ikilisinde çalışan worker mantığını içerir. Build sistemi bu giriş noktasını derler ve deployment içinde gönderir.

Bu sayfa, C++ component API'nin dizinidir. Ayrıntılı sayfalar component-api/cpp/ altında bulunur — class description, factory-typed bileşenler, stateful kalıpları, hata işleme, başlıklar ve tam tür referansı.

C++ bileşenleri için (language: cpp), yazdığın tek dosya src/main.cpp'dir. Bileşen dizininde xmake.lua yoktur — build base, build betiğine sahiptir. Derleme aşaması main.cpp'yi giriş noktası olarak ele alır, onu C++ ML SDK runtime + bildirdiğin xmake_packages: ile linkler ve platformun bir container içinde çalıştırdığı bileşen ikilisini üretir.

Bu dizin, component-api/cpp/ altındaki her dokümanı ve neyi kapsadığını listeler. Daha önce hiç C++ bileşeni yazmadıysan sırayla oku; hangi biçim/konunun peşinde olduğunu biliyorsan belirli bir sayfaya atla.

Gerekli okuma sırası

  1. component-api/cpp/typesMessage, Object<T>, String, List<T>, Tuple<T...>'ın ne anlama geldiği. Diğer her doküman bunları bildiğini varsayar.
  2. component-api/cpp/headers — başlık kataloğu. Hangi #include neyi getirir.
  3. component-api/cpp/configparse_config, read_config, mutable parametreler.
  4. component.yml'ine uyan bileşen biçimini seç (sonraki bölüm).
  5. component-api/cpp/errors — istisnalar, log konvansiyonları.

API referansları

Anlatı açıklaması değil de her türün her genel üyesinin tam imzasına ihtiyaç duyduğunda:

  • Types referencetypes.hpp içindeki her ad: atomik etiketler, List/Tuple/Union/Record/Named, concepts:: ad alanı, Type, TypeManager, tüm create_* fabrikaları.
  • Object reference — 8 temel türün tamamında Object<T>, Reference<T>, ConstReference<T>'nin her genel üyesi, artı yaşam süresi / aliasing değişmezleri.

Yukarıdaki anlatı dokümanları hâlâ doğru giriş noktasıdır — bu referanslar „statik bir Reference<Record> üzerindeki mutable_get'in tam imzası nedir?" gibi sorular için vardır.

Bileşen biçimleri

Biçimi şuna göre seç: kaç giriş aldığın, bunların 1'e 1 eşlenip eşlenmediği ve durum veya pull kontrolüne ihtiyacın olup olmadığı:

Bu biçimi kullanNe zaman
component-api/cpp/single-ioBir giriş, bir çıkış, durumsuz. Varsayılan ve en basit durum.
component-api/cpp/multi-input-positionalHer zaman birlikte gelen birden çok giriş (tick başına 1 tick), her biri bir Message argümanı.
component-api/cpp/vector-iostd::vector<Message> olarak alınan birden çok giriş/çıkış (variadik / genel).
component-api/cpp/statefulMesajlar arası duruma ihtiyacın var (sayaçlar, EMA, oturum eşlemesi, biriktirici).
component-api/cpp/factory-typedBileşen biçimi bağlanan türe bağlıdır (t gibi generic'ler).
component-api/cpp/class-descriptionTam pull kontrolüne ihtiyacın var (oran sınırlayıcılar, batcher'lar, eşzamansız akış, yaşam döngüsü kancaları).

İskelet

Her main.cpp şöyle başlar ve biter:

#include "pipelogic/pipelogic.hpp"using namespace ppl;// ... your worker function(s) ...PIPELOGIC_MAIN() {  run(<your_function>);  return EXIT_SUCCESS;}

PIPELOGIC_MAIN(), int main(int, char**) artı runtime bootstrap'a açılan bir makrodur. Asla kendin int main yazmazsın. Makro gövdesindeki tek çağrı run(...)'dur — bileşen biçimine uyan varyant (her biçim dokümanı tam biçimi gösterir).

return EXIT_SUCCESS; zorunludur — makro, gövdenin bir şey döndürmesini gerektirir.

Build yapılandırması

component.yml içindeki build_system:, derleme + runtime base'ini seçer (bkz. concepts/build-systems). C++ bileşenleri için:

build_systemGetirdiği
2C++ ML SDK araç zinciri ve runtime, ek ML kitaplığı yok.
2-ml2 + OpenCV, C++ ML SDK'nın ML başlıkları, yaygın çıkarım bağımlılıkları.

Base'in ötesindeki kitaplıklar için bunları component.yml içinde xmake_packages: altında listele:

xmake_packages:  - libcurl  - nlohmann_json

xmake paketi config gerektirdiğinde yapılandırılmış biçimi kullan:

xmake_packages:  - require: arrow 7.0.0    package: arrow    configs:      parquet: true      csv: false      snappy: true      zstd: true

require, tam add_requires(...) belirtimidir. package, add_packages(...)'a geçirilen addır; çıkarılan ad doğruysa onu atla. configs doğrudan xmake {configs = {...}}'a eşlenir.

Build bunları xmake'in paket kayıt defterinden çözer — hiç build betiği yazmazsın.

İlgili

  • component.ymlcomponent.yml içindeki her alan, worker.input_type(s), output_type(s), config_schema:, file_schema:, xmake_packages:, depends_on: dahil.
  • Türlerworker.input_type: / output_type: içinde kullanılan tür kataloğu.
  • Build Systemsbuild_system:'in neyi seçtiği.

Bu sayfa yardımcı oldu mu?