我观看了 C++ 类型擦除揭秘 - Fedor G Pikus - C++Now 2024,在 21:07 观众中有人提到,我认为,“开关和操作码”,声称 “就是这样
std::function
有效”,Pikus 似乎知道他们在说什么。
但我没有。
那是什么?有人可以解释一下“开关和操作码”是什么技术/模式/习惯用语、它的动机以及如何使用它的示例吗? (我疯狂猜测“switch”指的是
switch-statement如果你有 3 个函数,你可以存储 3 个函数指针,这在 x64 系统上将占用 24 个字节。
struct
{
void(*call_f)(void*);
void(*copy_f)(void*);
void(*delete_f)(void*);
};
您可以存储一个需要操作码的函数指针
enum op_code : char
{
call_f,
copy_f,
delete_f
};
struct
{
void(*united_call)(void*, op_code);
};
在您存储的
united_call
内,您可以切换操作码
void united_call_ex(void*, op_code code)
{
switch(code)
{
case call_f:
// do call stuff
case copy_f:
// do copy stuff
case delete_f:
// do delete stuff
break;
}
}