我要求使用一个模板技巧来检测一个类是否具有给定签名的特定成员函数。
这个问题与这里引用的问题相似 Http://www.gotw.ca/gotw/071.htm 但是不一样: 在 Sutter 的书中,他回答了这样一个问题: 类 C 必须提供一个带有特定签名的成员函数,否则程序就不能编译。在我的问题中,如果一个类有这个函数,我需要做一些事情,否则就做“别的事情”。
序列化也面临着类似的问题,但我不喜欢他们采用的解决方案: 一个模板函数默认调用一个带有特定签名的自由函数(你必须定义) ,除非你定义了一个带有特定签名的特定成员函数(在他们的情况下“序列化”带有给定类型的2个参数) ,否则就会发生编译错误。即同时实现侵入性和非侵入性序列化。
我不喜欢这个解决方案有两个原因:
我需要为没有这个成员函数的类定义一个自定义行为,并且我的实体位于不同的名称空间中(我不想在另一个名称空间中覆盖在一个名称空间中定义的全局函数)
你能给我一个解决这个难题的提示吗?