Belangrijkste verbeteringen in RTI Connext's Modern C++ DDS API
Sinds we de moderne C++ API voor DDS introduceerden, hebben we significant interesse van onze klanten gezien. Velen hebben begonnen nieuwe systemen te bouwen met C++11, en we hebben de API voortdurend verfijnd met een aantal impactvolle verbeteringen.
Verbeterde IDL Mapping naar Modern C++
RTI's Code Generator biedt nu een nieuwe -stl optie, gebruikt in combinatie met -language C++03 of -language C++11. Deze optie werkt de mapping van verschillende IDL-typen bij:
- Unbounded sequences →
std::vector(vereist -unboundedSupport) - Bounded sequences →
rti::core::bounded_sequence<T, Bound>. Dit type gedraagt zich alsstd::vectorgeoptimaliseerd voor deserialisatie. Voor lagere-latentie scenario's kunt ustd::vectorprefereren met de@use_vectorannotatie. - String en wide string types →
std::stringenstd::wstring - Leden geannoteerd met
@external(de „*” pointer-notatie) wordendds::core::external<T>, een veiliger wrapper vergelijkbaar metshared_ptr. Dit beschermt externe leden tegen overschrijving wanneer de middleware geheugen leent (bijv. lezen vanuit eenLoanedSamplescontainer).
Bijvoorbeeld, gegeven het volgende IDL-type:
struct MyType { sequence<long> my_unbounded_seq; sequence<long, 10> my_bounded_seq; @use_vector sequence<long, 10> my_other_bounded_seq string my_str; @external long my_external; };
Met het commando rtiddsgen -language C++11 -stl -unboundedSupport MyType.idl, ziet de gegenereerde C++11-klasse er als volgt uit:
class MyType { public: MyType(); ... MyType (MyType&&) = default; MyType& operator=(MyType&&) = default; MyType& operator=(const MyType&) = default; MyType(const MyType&) = default; std::vector<int32_t>& my_unbounded_seq() noexcept; const std::vector<int32_t>& my_unbounded_seq() const noexcept; void my_unbounded_seq(const std::vector<int32_t>& value); rti::core::bounded_sequence<int32_t, 10>& my_bounded_seq() noexcept; const rti::core::bounded_sequence<int32_t, 10>& my_bounded_seq() const noexcept; void my_bounded_seq(const rti::core::bounded_sequence<int32_t, 10>& value); std::vector<int32_t>& my_other_bounded_seq() noexcept; const std::vector<int32_t>& my_other_bounded_seq() const noexcept; void my_other_bounded_seq(const std::vector<int32_t>& value); std::string& my_str() noexcept; const std::string& my_str() const noexcept; void my_str(const std::string& value); dds::core::external<int32_t>& my_external() noexcept; const dds::core::external<int32_t>& my_external() const noexcept; void my_external(dds::core::external<int32_t> value); ... };
Request-Reply API voor Modern C++
De API bevat nu twee nieuwe entiteiten: rti::request::Requester en rti::request::Replier. Deze bieden een native request-reply patroon, dat al beschikbaar was in andere talen en in een prototype in versie 5.3 is geïntroduceerd en production-ready is in 5.3.0.7.
Een beknopt codevoorbeeld is beschikbaar hier.
Kleinere API Verbeteringen
We hebben diverse veelvoorkomende taken vereenvoudigd:
- Condition handlers in een
WaitSetkunnen nu de condition als argument accepteren, wat de noodzaak voor no-argument functors elimineert:
condition.handler([]() { // do something }); // or, with the new signature condition.handler([](dds::core::cond::Condition c) { // do something (condition == c) });
TopicQuery voor On-Demand Historische Data
TopicQuery, geïntroduceerd in 5.3, stelt applicaties in staat om historische data on-demand op te halen. In de moderne C++ API kunt u een TopicQuery creëren vanuit een DataReader als volgt:
rti::sub::TopicQuery my_topic_query( my_reader, rti::sub::TopicQuerySelection(dds::topic::Filter("x < 10")) );
U kunt dan historische samples die aan de filter voldoen opnemen, terwijl u live data normaal ontvangt.
Uitkijk
Met C++17 nu goedgekeurd en C++20 op de horizon, zal RTI Connext de C++ API blijven evolueren met moderne taalfeatures en prestatieverbeteringen. Blijf op de hoogte of abonneer u op de RTI Blog voor de nieuwste updates.
Internet of Things-technologie
- IoT: De digitale renaissance van de hoogstraat aandrijven
- Derde-generatie streamverwerking: IoT-data omzetten in realtime-actie
- Waarom 5G-uitrol vertraagd wordt: Kosten, spectrum en dekkingsuitdagingen
- Edge Computing: Real-time data ontgrendelen, efficiëntie boosten en nieuwe omzet drijven
- G.hn: De industriële IoT-revolutie aandrijven voor kosteneffectieve, betrouwbare connectiviteit
- Slimme productie herdenken voor de nieuwe normaliteit: Data-gedreven strategieën voor veerkracht
- Data: De Nieuwe Olie – Hoe Raffinaderijen Ruwe Informatie Omzetten In Zakelijke Waarde
- Ontmoet de IT/OT Hybride Professional: Data Centers en Industriële Automatisering Bruggen
- Microsoft Onthult AI-onderzoekincubator Gericht op Algemeen-doel Intelligentie
- Landbouw Revolutie: Hoe IoT Efficiëntie En Duurzaamheid In Moderne Landbouw Drijft
- Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden