gpt4 book ai didi

c++ - 在编译时获取捕获 Lambda 的类型

转载 作者:行者123 更新时间:2023-11-28 01:24:37 26 4
gpt4 key购买 nike

我正在尝试创建捕获 lambda 的类静态映射,但在编译时获取类型以输入映射模板时遇到了一些困难。

这是 lambda 签名...

[=] (const uint8_t *buffer, const size_t bufferSize) -> void 
{
//stuff
};

我正在尝试像这样存储在 map 中......

constexpr static auto generateExampleLambda(void) {

auto lambda = [=] (const uint8_t *buffer, const size_t bufferSize) -> void
{
//stuff
};

return lambda;
}

constexpr static inline auto exampleLambda = generateExampleLambda();
constexpr typedef decltype(exampleLambda) LambdaType;
static inline std::unordered_map<uint16_t, LambdaType> callbacks;

但显然这不能编译。我已经在没有捕获的情况下工作了,但这当然是最简单的情况,哈哈。

最佳答案

不幸的是,每个 lambda 都有自己的类型。

为了证明这一点,你可以验证一下

auto l1 = []{};
auto l2 = []{};

static_assert( false == std::is_same_v<decltype(l1), decltype(l2)>, "!" );
// ............^^^^^

所以我认为不可能为具有 lambda 类型的不同 lambda 创建映射。

我能想到的最好的办法是在某些 std::function<void(const uint8_t, const size_t)> 中插入 lambda(不止一个)并制作callbacks一个

std::unordered_map<uint16_t, std::function<void(const uint8_t, const size_t)>>

关于c++ - 在编译时获取捕获 Lambda 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com