函数指针数组的类型是什么
What is the type of an array of function pointers?
我有以下类:
class DXStartupEncoder {
public:
void EncodeA(unsigned char*& message) const;
void EncodeB(unsigned char*& message) const;
void EncodeC(unsigned char*& message) const;
void EncodeD(unsigned char*& message) const;
};
<type> dn_sequence[] = {&DXStartupEncoder::EncodeA, &DXStartupEncoder::EncodeB, &DXStartupEncoder::EncodeC, &DXStartupEncoder::EncodeD };
但是这个函数指针数组的类型是什么?
如果您不确定,请使用typedef
。
typedef void (DXStartupEncoder::*Encoder)(unsigned char*&) const;
Encoder dn_sequence[] = { .... };
在 C++11 中,您可以使用 decltype
从值推断类型,因此您甚至不需要知道如何编写成员函数指针的类型(auto
不起作用,因为右侧是initializer_list):
decltype(&DXStartupEncoder::EncodeA) dn_sequence[] = { ... };
如果你需要避免typedef
,顺便说一下,你可以把它写成:
void (DXStartupEncoder::*dn_sequence[])(unsigned char*&) const = { ... };
-
您没有函数指针。您有指向成员函数的指针。
您 不是在询问数组的类型;相反,您是在询问数组的基础类型。
基础类型为:
void (DXStartupEncoder::*)(unsigned char * &)
因此,(不完整)数组类型为:
void (DXStartupEncoder::*[])(unsigned char * &)
该类型称为指针到成员。
您可以将数组声明为:
void (DXStartupEncoder::*dn_sequence[])(unsigned char *&) const = {...};
这从声明反射使用中很明显;给定一个索引i
、一个const DXStartupEncoder &
引用enc
和一个unsigned char *&
引用c
,你会写:
(enc.*dn_sequence[i])(c)
生成类型 void
的值:
(enc .* dn_sequence[i])(c )
void (DXStartupEncoder::*dn_sequence[] )(unsigned char *&) const
相关文章:
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 类名后跟括号的类型是什么
- std::chrono::duration::count函数的实际结果类型是什么
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- 指向 2D 数组的指针的类型是什么?
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- 共享_ptr中多功能数组的类型是什么
- 构造函数的类型是什么?
- 字符串中单个字符作为数组的数据类型是什么
- 该结构继承的类型是什么
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- C 中被视为可可的类型是什么
- 当函数采用右值引用时,函数中该变量的类型是什么?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- 模板类中引用的引用的类型是什么
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 包含通过引用捕获的 lambda 函数的"variable"的类型是什么?
- 通过插座发送的内容的数据类型是什么