在类型擦除和/或只是 std::function 的上下文中“切换和操作代码”是什么?

问题描述 投票:0回答:1

我观看了 C++ 类型擦除揭秘 - Fedor G Pikus - C++Now 2024,在 21:07 观众中有人提到,我认为,“开关和操作码”,声称 “就是这样

std::function
有效”,Pikus 似乎知道他们在说什么。

但我没有。

那是什么?有人可以解释一下“开关和操作码”是什么技术/模式/习惯用语、它的动机以及如何使用它的示例吗? (我疯狂猜测“switch”指的是

switch-statement

。)

c++ switch-statement std-function type-erasure
1个回答
0
投票

如果你有 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;
    }
}

	
© www.soinside.com 2019 - 2024. All rights reserved.