One Framework 0.1.0
RoboMaster嵌入式框架“一键”解决方案,为你的“创意”服务。
载入中...
搜索中...
未找到
Topic.hpp
浏览该文件的文档.
1#ifndef OF_LIB_NODE_TOPIC_HPP
2#define OF_LIB_NODE_TOPIC_HPP
3
4#include <string>
5
6#include <OF/utils/NBuf.hpp>
8
9
10namespace OF
11{
12 template <typename T>
13 concept Printable = requires
14 {
15 { std::declval<T>().format() } -> std::convertible_to<std::string&&>;
16 };
17
18 template <typename T>
19 class Topic
20 {
21 public:
22 void write(const T& data)
23 {
24 m_buf.write(data);
25 }
26
27 template <typename Func>
28 void manipulate(const Func& func)
29 {
30 m_buf.manipulate(func);
31 }
32
33 std::optional<T> try_read()
34 {
35 return m_buf.try_read();
36 }
37
38 T read()
39 {
40 return m_buf.read();
41 }
42
43 static void print_stub(const topic_desc* desc)
44 {
45 auto* self = static_cast<Topic*>(desc->topic_instance);
46 T val = self->read();
47 printk("Topic: %-15s | Size: %d | ", desc->name, sizeof(T));
48 if constexpr (Printable<T>)
49 {
50 printk("%s", val.format().c_str());
51 }
52 printk("\n");
53 }
54
55 private:
57 };
58}
59
60#endif //OF_LIB_NODE_TOPIC_HPP
定义 NBuf.hpp:19
定义 Topic.hpp:20
void write(const T &data)
定义 Topic.hpp:22
T read()
定义 Topic.hpp:38
void manipulate(const Func &func)
定义 Topic.hpp:28
std::optional< T > try_read()
定义 Topic.hpp:33
static void print_stub(const topic_desc *desc)
定义 Topic.hpp:43
定义 Topic.hpp:13
定义 Mecanum.hpp:6
定义 Descriptor.hpp:19
void * topic_instance
定义 Descriptor.hpp:21
const char * name
定义 Descriptor.hpp:20