在c ++ 17中,可以进行模板元编程来检测“ this”是否是捕获组的一部分吗?还是在运行时?
我有一个A类,它接受lambda供以后调用。但是,如果拥有A的对象B在它给A的lambda中捕获了“ this”,则可能导致微妙的使用后释放。在这种情况下能够崩溃将很有价值。
我知道他们不会是100%(例如,用户可以将其捕获为“ a = this”或“ b =(void *)this”)。我也不希望能够捕获所有问题(例如,如果捕获对成员变量的引用)。我只是想对明显错误的情况增加一些信心
答案 0 :(得分:7)
lambda只比编译器生成的具有operator()
重载的类多。。模板编程中没有机制可以(跨平台)检测编译器是否生成了特定类型,更不用说内省该类的“成员”以了解其捕获的内容和方式了。
您只需要期望系统的用户遵守适当的纪律即可。