c++ - 一次发布多个数据

标签 c++ function callback

我有一个头文件,其中包含以下格式的宏列表 #define <name_of_error> <word>,<bit> "<name_of_error>

以下是头文件的一部分-

#define CAMERA_ERROR 0,0, "CAMERA_ERROR"
#define IMAGE_NOT_DISPLAYING 0,1, "IMAGE_NOT_DISPLAYING"
#define CHANGE_IMAGE_CONSISTENCY 1,2, "CHANGE_IMAGE_CONSISTENCY"

现在我有一个 cpp 源文件,我在其中创建了一个函数 pubError并将头文件信息作为参数传递 -

void pubError(int word, int bit, string name_of_error)
{
  // Body of the function
}

我有一个回调函数,我尝试调用函数 pubError从它内部(并传递 name_of_error )如下 -

void sensorCallback(const diagnostic_msgs::DiagnosticArrayPtr &msg)
{
  msg->status[0].level == diagnostic_msgs::DiagnosticStatus::ERROR
  this->sc_.pubError(CAMERA_ERROR);
}

通过这种方式,我可以在特定时间仅发布 1 个错误。如何通过函数 pubError 从头文件中发布多个错误?

最佳答案

有多种方法可以解决这个问题。假设您不想更改您的 #define,您可以按如下方式更改您的 pubError 函数:

struct Error { int e1; int e2; std::string error; };
void pubError(std::vector<Error> errors)
{
    for (auto e : errors) std::cout << e.error.c_str() << std::endl;
}

然后您可以这样调用它:

#define CAMERA_ERROR 0,0, "CAMERA_ERROR"
#define IMAGE_NOT_DISPLAYING 0,1, "IMAGE_NOT_DISPLAYING"
#define CHANGE_IMAGE_CONSISTENCY 1,2, "CHANGE_IMAGE_CONSISTENCY"

pubError({ { CAMERA_ERROR }, { IMAGE_NOT_DISPLAYING } });

关于c++ - 一次发布多个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581663/

相关文章:

java - 回调和接口(interface)的区别

c++ - MurmurHash 函数不具有确定性

c++ - 在 std::variant 中隐藏模板参数

javascript - 如何检查 JavaScript 函数是否返回 Promise?

c++ - 将 lambda 作为回调传递给 C 函数

java - 如何在具有相同回调签名的 .dll 和 .so 中使用 JNA

c++ - 通过引用或指针返回并检查是否为空?

c++ - 如果用户对 C++ 说,如何提前结束循环

c++ - 从 C++ 中的类访问私有(private)变量

Bash:从函数返回行号