c++ - 是否可以检测 lambda 在捕获组中是否具有 “this”?

标签 c++ c++17 template-meta-programming

在 c++17 中,是否可以进行模板元编程来检测“this”是否是捕获组的一部分?还是在运行时?

我有一个接受 lambda 供以后调用的 A 类。但是,如果拥有 A 的对象 B 在它提供给 A 的 lambda 中捕获了“this”,那么它可能会导致微妙的释放后使用。能够在这种情况下崩溃是很有值(value)的。

我知道他们不会是 100%(例如,用户可以将其捕获为“a = this”或“b = (void*)this”)。我也不期望能够捕获所有问题(例如,如果我捕获对成员变量的引用)。我只是想在明显错误的场景中增加一些信心

最佳答案

lambda 只不过是由编译器生成的具有重载 operator() 的类。模板编程中没有机制可以(跨平台)检测编译器是否生成特定类型,更不用说内省(introspection)该类的“成员”以弄清楚它捕获了什么以及如何捕获。

您只需要期望您系统的用户遵守适当的纪律。

关于c++ - 是否可以检测 lambda 在捕获组中是否具有 “this”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62821083/

相关文章:

c++ - 成员模板的别名模板

c++ - 非递归获取可变参数模板最后类型的通用类型特征?

c++ - 基于可变参数模板的类成员变量

c++ - 使用observer_ptr

c++ - 无法理解线路的工作原理

c++ - 如何在 openvino 中运行 cpp 示例

c++ - void Test::printxy(void )' : cannot convert ' this' const 类中从 'const Test' 到 'Test &' 的指针

c++ - 用 C++17 功能替换 Boost MPL 容器

c++ - 使用 c++ 和 glfw 的 raii 架构

C++:为什么禁止递归模板化别名?