C++11实现检查是否存在特定的成员函数-创新互联
问题提出

最近工作中遇到这样一个需求:实现一个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自带了一个这样的检测器,并不需要自己写这样的模板)。
经人提醒,我参考了下标准库在实现swap上做的努力,看到了这样的写法:
namespace __swappable_details {
using std::swap;
struct __do_is_swappable_impl
{
template (), std::declval<_Tp&>()))>
static true_type __test(int);
template
static false_type __test(...);
};
}
template
struct __is_swappable_impl
: public __swappable_details::__do_is_swappable_impl
{
typedef decltype(__test<_Tp>(0)) type;
};
template
struct __is_swappable
: public __is_swappable_impl<_Tp>::type
{}; 另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站题目:C++11实现检查是否存在特定的成员函数-创新互联
分享URL:http://www.jxjierui.cn/article/cojgci.html


咨询
建站咨询
