创建指向header内部所有公共静态成员函数的指针数组,然后使用它
C++ Create pointer array to all public static member functions inside header and then use it
[Ubuntu 13.10]
我正在创建一个包含一堆回调函数的类。在我的主程序中,我将这些回调函数分配给各个节点。我希望能够在循环中做到这一点,所以我试图在头类(没有.cpp)中创建一个静态指针数组,该数组具有其成员函数的所有地址。
我似乎搞不懂做这件事的语法。
1)下面是我的头定义类。我初始化cbPointer的正确方式?
#include "std_msgs/String.h"
typedef void (*FunctionPointer)(const std_msgs::String_<std::allocator<void> >::ConstPtr &);
class myCallbacks {
public:
static void cbEvent1(const std_msgs::String::ConstPtr& msg) {
std::cout << "I heard: " << msg->data.c_str() << std::endl;
}
static void cbEvent2(const std_msgs::String::ConstPtr& msg) {
std::cout << "I heard: " << msg->data.c_str() << std::endl;
}
constexpr static const FunctionPointer cbPointer[2] = {&myCallbacks::cbEvent1, &myCallbacks::cbEvent2};
};
然后在主程序中,我像这样分配回调函数:
for (int j=0; j<NO_CALLBACKS; j++) {
subList[j] = (sNode[j])->subscribe(myCallbacks::cbPointer[j]);
}
subscribe
方法的签名如下:
template<class M , class T >
subscribe (void(T::*fp)(M))
但我得到一个链接错误:undefined reference to myCallbacks::cbPointer
。我已经尝试了各种各样的subList[j] = (sNode[j])->subscribe(myCallbacks::cbPointer[j]);
变化,但似乎没有工作。
有人能帮我用正确的语法吗?(另外,是否可以在头文件中创建数组而不拼写每个函数名?)
我已经知道怎么做了:
#ifndef MYCALLBACKS_H
#define MYCALLBACKS_H
#include "std_msgs/String.h"
typedef void (*FunctionPointer)(const std_msgs::String_<std::allocator<void> >::ConstPtr &);
class myCallbacks {
public:
static void cbEvent1(const std_msgs::String::ConstPtr& msg) {
std::cout << "I heard: " << msg->data.c_str() << std::endl;
}
static void cbEvent2(const std_msgs::String::ConstPtr& msg) {
std::cout << "I heard: " << msg->data.c_str() << std::endl;
}
static FunctionPointer cbPointer[];
}
FunctionPointer myCallbacks::cbPointer[] = {&myCallbacks::cbEvent1, &myCallbacks::cbEvent2};
#endif
现在我可以使用myCallbacks::cbPointer[x]
来引用成员函数的地址。
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”