编写简单的消息发布器与订阅器,消息由浮点数和字符串两种数据类型组成,要求发布器用C++编写,订阅器用python编写,并编写相应的cmakelists文件
时间: 2024-01-17 18:05:52 浏览: 25
下面是C++实现的消息发布器:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
class Publisher {
public:
void addSubscriber(void (*callback)(float, const std::string&)) {
subscribers_.push_back(callback);
}
void publish(float value, const std::string& message) {
for (auto& subscriber : subscribers_) {
subscriber(value, message);
}
}
private:
std::vector<void (*)(float, const std::string&)> subscribers_;
};
int main() {
Publisher publisher;
publisher.addSubscriber([](float value, const std::string& message) {
std::cout << "Received message: " << value << ", " << message << std::endl;
});
publisher.publish(3.14f, "Hello World!");
return 0;
}
```
这个程序定义了一个Publisher类,它有两个方法,addSubscriber和publish。addSubscriber用于添加订阅者,它需要传入一个函数指针,这个函数指针代表了订阅者所要执行的回调函数。publish用于发布消息,它会调用所有订阅者注册的回调函数。
下面是Python实现的消息订阅器:
```python
import time
class Subscriber:
def __init__(self):
self.messages = []
def callback(self, value, message):
self.messages.append((value, message))
def print_messages(self):
for value, message in self.messages:
print("Received message: {}, {}".format(value, message))
subscriber = Subscriber()
while True:
time.sleep(1)
subscriber.print_messages()
```
这个程序定义了一个Subscriber类,它有一个callback方法,这个方法会将接收到的消息存储在一个messages列表中。程序还定义了一个print_messages方法,它会打印出所有接收到的消息。
在主循环中,程序会每隔一秒钟调用一次print_messages方法,以打印出新的消息。在实际应用中,可以将这个程序放在一个无限循环中,以保持订阅者的运行。
最后,我们需要编写相应的CMakeLists文件,将两个程序编译成可执行文件。下面是CMakeLists文件的内容:
```cmake
cmake_minimum_required(VERSION 3.0)
project(pubsub)
# Publisher
add_executable(publisher publisher.cpp)
# Subscriber
add_executable(subscriber subscriber.py)
# Install
install(TARGETS publisher subscriber DESTINATION bin)
```
这个文件告诉CMake要编译两个可执行文件,publisher和subscriber。最后,它会将这两个可执行文件安装到系统的bin目录中。