Vit*_*ali 2 c++ template-meta-programming c++17
在 c++17 中是否可以进行模板元编程来检测“this”是否是捕获组的一部分,如何?还是在运行时?
我有一个 A 类,它接受 lambda 以供以后调用。然而,如果拥有 A 的对象 B 在它给 A 的 lambda 中捕获了“this”,那么它可能会导致微妙的 use-after free。能够在这种情况下崩溃将是有价值的。
我知道它们不会是 100%(例如,用户可以将其捕获为“a = this”或“b = (void*)this”)。我也不希望能够捕获所有问题(例如,如果我捕获对成员变量的引用)。我只是想在明显错误的场景中增加一些信心
一个 lambda只不过是由编译器生成的一个类,它有一个重载的operator(). 模板编程中没有机制可以(跨平台)检测特定类型是否由编译器生成,更不用说内省到该类的“成员”以找出它捕获的内容以及如何捕获的。
您只需要期望您的系统用户执行适当的纪律。