    

 ## On this page

  

 

 # topic

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1 

<a id="l00005" name="l00005"></a> 5 

<a id="l00006" name="l00006"></a> 6\#pragma once

<a id="l00007" name="l00007"></a> 7 

<a id="l00008" name="l00008"></a> 8\#include "core/communication/i\_topic.h"

<a id="l00009" name="l00009"></a> 9\#include &lt;functional&gt;

<a id="l00010" name="l00010"></a> 10\#include &lt;stdexcept&gt;

<a id="l00011" name="l00011"></a> 11 

<a id="l00016" name="l00016"></a> 16namespace [simulation\_framework](namespacesimulation__framework.xhtml)

<a id="l00017" name="l00017"></a> 17{

<a id="l00018" name="l00018"></a> 18namespace [core](namespacecore.xhtml)

<a id="l00019" name="l00019"></a> 19{

<a id="l00020" name="l00020"></a> 20 

<a id="l00021" name="l00021"></a> 21using TopicId = std::string;

<a id="l00022" name="l00022"></a> 22 

<a id="l00036" name="l00036"></a> 36template &lt;typename TopicMsgType&gt;

<a id="l00037" name="l00037"></a>[ 37](classsimulation__framework_1_1core_1_1Topic.xhtml)class [Topic](classsimulation__framework_1_1core_1_1Topic.xhtml) : public [ITopic](classsimulation__framework_1_1core_1_1ITopic.xhtml)

<a id="l00038" name="l00038"></a> 38{

<a id="l00039" name="l00039"></a> 39 public:

<a id="l00040" name="l00040"></a> 40 using PublisherCallback = std::function&lt;TopicMsgType()&gt;;

<a id="l00041" name="l00041"></a> 41 using SubscriberMessageCallback = std::function&lt;void(const TopicMsgType&amp;)&gt;;

<a id="l00042" name="l00042"></a> 42 using TopicMessageType = TopicMsgType;

<a id="l00043" name="l00043"></a> 43 

<a id="l00044" name="l00044"></a> 44 [Topic](classsimulation__framework_1_1core_1_1Topic.xhtml)(const TopicId&amp; topic_id, const TopicType topic_type = TopicType::kRTIDDS)

<a id="l00045" name="l00045"></a> 45 : [ITopic](classsimulation__framework_1_1core_1_1ITopic.xhtml){}, topic_id_(topic_id), topic_type_(topic_type)

<a id="l00046" name="l00046"></a> 46 {

<a id="l00047" name="l00047"></a> 47 }

<a id="l00048" name="l00048"></a> 48 

<a id="l00049" name="l00049"></a>[ 49](classsimulation__framework_1_1core_1_1Topic.xhtml#a6cef83adabcaab8aabd20cd3184dca3c) TopicId [GetId](classsimulation__framework_1_1core_1_1Topic.xhtml#a6cef83adabcaab8aabd20cd3184dca3c)() const override { return topic_id_; }

<a id="l00050" name="l00050"></a>[ 50](classsimulation__framework_1_1core_1_1Topic.xhtml#a6f459336816bf96dd43d4a827043485d) TopicType [GetType](classsimulation__framework_1_1core_1_1Topic.xhtml#a6f459336816bf96dd43d4a827043485d)() const override { return topic_type_; }

<a id="l00051" name="l00051"></a> 51 

<a id="l00052" name="l00052"></a>[ 52](classsimulation__framework_1_1core_1_1Topic.xhtml#a9a3bdb1cc0fb2b885fbe528903abcb14) void [AddPublisher](classsimulation__framework_1_1core_1_1Topic.xhtml#a9a3bdb1cc0fb2b885fbe528903abcb14)(std::unique_ptr&lt;IPublisher&gt; pub_ptr) override

<a id="l00053" name="l00053"></a> 53 {

<a id="l00054" name="l00054"></a> 54 if (publishers_.size() == 1)

<a id="l00055" name="l00055"></a> 55 {

<a id="l00056" name="l00056"></a> 56 throw std::range_error("Already a Publisher for topic " + topic_id_ +

<a id="l00057" name="l00057"></a> 57 " has been set. Multiple publishers for same topic is NOT allowed! ");

<a id="l00058" name="l00058"></a> 58 }

<a id="l00059" name="l00059"></a> 59 publishers_.push_back(std::move(pub_ptr));

<a id="l00060" name="l00060"></a> 60 }



<a id="l00061" name="l00061"></a>[ 61](classsimulation__framework_1_1core_1_1Topic.xhtml#a33882d851ffa66f8db5a83813969e48a) void [AddSubscriber](classsimulation__framework_1_1core_1_1Topic.xhtml#a33882d851ffa66f8db5a83813969e48a)(std::unique_ptr&lt;ISubscriber&gt; sub_ptr) override { subscribers_.push_back(std::move(sub_ptr)); }

<a id="l00062" name="l00062"></a> 62 

<a id="l00063" name="l00063"></a>[ 63](classsimulation__framework_1_1core_1_1Topic.xhtml#a71ce3df423a48cbc555cf9fb322726df) std::size_t [SubscriberCount](classsimulation__framework_1_1core_1_1Topic.xhtml#a71ce3df423a48cbc555cf9fb322726df)() const override { return subscribers_.size(); }

<a id="l00064" name="l00064"></a>[ 64](classsimulation__framework_1_1core_1_1Topic.xhtml#a9056b30c90efc165ee8559b41e8a9064) std::size_t [PublisherCount](classsimulation__framework_1_1core_1_1Topic.xhtml#a9056b30c90efc165ee8559b41e8a9064)() const override { return publishers_.size(); }

<a id="l00065" name="l00065"></a> 65 

<a id="l00066" name="l00066"></a>[ 66](classsimulation__framework_1_1core_1_1Topic.xhtml#ac366c5dd53e4c5770b1a5f40ae2c8956) void [ClearPubSub](classsimulation__framework_1_1core_1_1Topic.xhtml#ac366c5dd53e4c5770b1a5f40ae2c8956)() override

<a id="l00067" name="l00067"></a> 67 {

<a id="l00068" name="l00068"></a> 68 publishers_.clear();

<a id="l00069" name="l00069"></a> 69 subscribers_.clear();

<a id="l00070" name="l00070"></a> 70 }



<a id="l00071" name="l00071"></a> 71 

<a id="l00072" name="l00072"></a>[ 72](classsimulation__framework_1_1core_1_1Topic.xhtml#ab0a3ea471d469cf2b0611b6548752298) const Subscribers&amp; [GetSubscribers](classsimulation__framework_1_1core_1_1Topic.xhtml#ab0a3ea471d469cf2b0611b6548752298)() const override { return subscribers_; }

<a id="l00073" name="l00073"></a>[ 73](classsimulation__framework_1_1core_1_1Topic.xhtml#ac31691f84f68ad4a3aeda6074739676f) const Publishers&amp; [GetPublishers](classsimulation__framework_1_1core_1_1Topic.xhtml#ac31691f84f68ad4a3aeda6074739676f)() const override { return publishers_; }

<a id="l00074" name="l00074"></a> 74 

<a id="l00075" name="l00075"></a> 75 private:

<a id="l00076" name="l00076"></a> 76 TopicId topic_id_{};

<a id="l00077" name="l00077"></a> 77 Subscribers subscribers_{};

<a id="l00078" name="l00078"></a> 78 Publishers publishers_{};

<a id="l00079" name="l00079"></a> 79 

<a id="l00080" name="l00080"></a> 80 const core::TopicType topic_type_{core::TopicType::kRTIDDS};

<a id="l00081" name="l00081"></a> 81};



<a id="l00082" name="l00082"></a> 82 

<a id="l00083" name="l00083"></a> 83} // namespace core

<a id="l00084" name="l00084"></a> 84} // namespace simulation\_framework

[simulation\_framework::core::ITopic](classsimulation__framework_1_1core_1_1ITopic.xhtml)

**Definition** [i\_topic.h:37](i__topic_8h_source.xhtml#l00036)



[simulation\_framework::core::Topic](classsimulation__framework_1_1core_1_1Topic.xhtml)

This is the concrete Topic class that can be used for creation of a communication channel with given ...

**Definition** [topic.h:38](topic_8h_source.xhtml#l00037)



[simulation\_framework::core::Topic::AddSubscriber](classsimulation__framework_1_1core_1_1Topic.xhtml#a33882d851ffa66f8db5a83813969e48a)

void AddSubscriber(std::unique_ptr&lt; ISubscriber &gt; sub_ptr) override

**Definition** [topic.h:61](topic_8h_source.xhtml#l00061)



[simulation\_framework::core::Topic::GetId](classsimulation__framework_1_1core_1_1Topic.xhtml#a6cef83adabcaab8aabd20cd3184dca3c)

TopicId GetId() const override

**Definition** [topic.h:49](topic_8h_source.xhtml#l00049)



[simulation\_framework::core::Topic::GetType](classsimulation__framework_1_1core_1_1Topic.xhtml#a6f459336816bf96dd43d4a827043485d)

TopicType GetType() const override

**Definition** [topic.h:50](topic_8h_source.xhtml#l00050)



[simulation\_framework::core::Topic::SubscriberCount](classsimulation__framework_1_1core_1_1Topic.xhtml#a71ce3df423a48cbc555cf9fb322726df)

std::size_t SubscriberCount() const override

**Definition** [topic.h:63](topic_8h_source.xhtml#l00063)



[simulation\_framework::core::Topic::PublisherCount](classsimulation__framework_1_1core_1_1Topic.xhtml#a9056b30c90efc165ee8559b41e8a9064)

std::size_t PublisherCount() const override

**Definition** [topic.h:64](topic_8h_source.xhtml#l00064)



[simulation\_framework::core::Topic::AddPublisher](classsimulation__framework_1_1core_1_1Topic.xhtml#a9a3bdb1cc0fb2b885fbe528903abcb14)

void AddPublisher(std::unique_ptr&lt; IPublisher &gt; pub_ptr) override

**Definition** [topic.h:52](topic_8h_source.xhtml#l00052)



[simulation\_framework::core::Topic::GetSubscribers](classsimulation__framework_1_1core_1_1Topic.xhtml#ab0a3ea471d469cf2b0611b6548752298)

const Subscribers &amp; GetSubscribers() const override

**Definition** [topic.h:72](topic_8h_source.xhtml#l00072)



[simulation\_framework::core::Topic::GetPublishers](classsimulation__framework_1_1core_1_1Topic.xhtml#ac31691f84f68ad4a3aeda6074739676f)

const Publishers &amp; GetPublishers() const override

**Definition** [topic.h:73](topic_8h_source.xhtml#l00073)



[simulation\_framework::core::Topic::ClearPubSub](classsimulation__framework_1_1core_1_1Topic.xhtml#ac366c5dd53e4c5770b1a5f40ae2c8956)

void ClearPubSub() override

**Definition** [topic.h:66](topic_8h_source.xhtml#l00066)



[core](namespacecore.xhtml)

The namespace for all core functionalities under namespace simulation_framework.



[simulation\_framework](namespacesimulation__framework.xhtml)

The top namespace for simulation framework.