16
检查类是否具有给定签名的成员函数
我要一个模板技巧来检测一个类是否具有给定签名的特定成员函数。 这个问题类似于一个引用在这里 http://www.gotw.ca/gotw/071.htm ,但不一样的:在萨特的书的项目,他回答的问题是C类必须提供带成员函数特定签名,否则程序将无法编译。在我的问题中,如果一个类具有该功能,则需要执行某些操作,否则执行“其他操作”。 boost :: serialization面临着类似的问题,但我不喜欢它们采用的解决方案:模板函数默认情况下调用具有特定签名的自由函数(必须定义),除非您定义特定的成员函数(在他们的情况下,“序列化”使用两个具有给定类型的参数(带有特定签名),否则会发生编译错误。那就是要实现介入式和非介入式序列化。 我不喜欢该解决方案,原因有两个: 要成为非侵入式,您必须覆盖boost :: serialization名称空间中的全局“序列化”功能,以便您可以在客户端代码中打开名称空间boost和名称空间序列化! 解决该混乱的堆栈是10到12个函数调用。 我需要为没有该成员函数的类定义一个自定义行为,并且我的实体位于不同的名称空间中(并且我不想覆盖在一个名称空间中定义的全局函数,而在另一个名称空间中) 你能给我一个解决这个难题的提示吗?