如何确认C++ 11中某个类是否定义了特定的成员函数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计926个文字,预计阅读时间需要4分钟。
问题提出+最近工作中遇到这样一个需求:实现一个ToString函数,将类类型T转换到字符串,如果类T中包含同名方法ToString则直接调用。这样的一ToString实现可以使用std::enable_if来实现。
问题提出
最近工作中遇到这样一个需求:实现一个ToString函数将类型T转换到字符串,如果类型T中含有同名方法ToString则直接调用。
这样一个ToString实现可以使用std::enable_if来做到,但是这里的难点在于如何判断类型T中存在这样一个ToString方法,以便可以放入enable_if中做SFINAE。
检查类中是否存在特定成员
相同的问题在知乎上有人提出过,@孙明琦的答案提供了一个用于检测特定检测子U在类型T下是否有效的检测器is_detected_v。其中用到了一个C++17的std::void_t,考虑到目前C++17还没得用,这个实现只作参考之用(事实上C++17自带了一个这样的检测器,并不需要自己写这样的模板)。
本文共计926个文字,预计阅读时间需要4分钟。
问题提出+最近工作中遇到这样一个需求:实现一个ToString函数,将类类型T转换到字符串,如果类T中包含同名方法ToString则直接调用。这样的一ToString实现可以使用std::enable_if来实现。
问题提出
最近工作中遇到这样一个需求:实现一个ToString函数将类型T转换到字符串,如果类型T中含有同名方法ToString则直接调用。
这样一个ToString实现可以使用std::enable_if来做到,但是这里的难点在于如何判断类型T中存在这样一个ToString方法,以便可以放入enable_if中做SFINAE。
检查类中是否存在特定成员
相同的问题在知乎上有人提出过,@孙明琦的答案提供了一个用于检测特定检测子U在类型T下是否有效的检测器is_detected_v。其中用到了一个C++17的std::void_t,考虑到目前C++17还没得用,这个实现只作参考之用(事实上C++17自带了一个这样的检测器,并不需要自己写这样的模板)。

