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

时间:2020-07-09 18:09:06

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

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

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

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

1 个答案:

答案 0 :(得分:7)

lambda只比编译器生成的具有operator()重载的类多。。模板编程中没有机制可以(跨平台)检测编译器是否生成了特定类型,更不用说内省该类的“成员”以了解其捕获的内容和方式了。

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