SFINAE简单实例
2018-06-17 21:00:18来源:未知 阅读 ()
SFINAE(Substitution failure is not an error),是C++11以来推出的一个重要概念,这里,只是简单举一个例子,可能会有人需要。
// 添加 scalar numeric conversion function,实现源自 C++ programming language(4th) // 用来防止使用static转换的时候,值发生改变 // there is no implicit conversion from Source to Target template <typename Target, typename Source, typename = std::enable_if_t<!std::is_reference_v<Target> && !std::is_same_v<std::common_type_t<std::decay_t<Target>, std::decay_t<Source>>, std::decay_t<Target>>, int>> inline Target narrow_cast(Source v) { static_assert(std::is_arithmetic<Source>::value, "The parameter of narrow_cast should be arithmetic"); static_assert(std::is_arithmetic<Target>::value, "The return value of narrow_cast should be arithmetic"); // using Target_U = std::remove_reference_t<Target>; // using Source_U = std::remove_reference_t<Source>; auto r = static_cast<Target>(v); if (static_cast<Source>(r) != v) throw std::runtime_error("narrow_cast<>() failed"); return r; } // there is implicit conversion from Source to Target template <typename Target, typename Source, typename = std::enable_if_t<!std::is_reference_v<Target> && std::is_same_v<std::common_type_t<std::decay_t<Target>, std::decay_t<Source>>, std::decay_t<Target>>, int>> inline constexpr std::remove_reference_t<Source> narrow_cast(Source v) { static_assert(std::is_arithmetic<Source>::value, "The parameter of narrow_cast should be arithmetic"); static_assert(std::is_arithmetic<Target>::value, "The return value of narrow_cast should be arithmetic"); return std::remove_reference_t<Source>(v); }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 加边的无向图--并查集 2020-04-10
- 排兵布阵 2020-02-21
- 二叉树(四)二叉堆 2020-02-03
- 一款简单的C++猜数字游戏(新手必学) 2019-12-10
- 《大话设计模式》之简单工厂模式 2019-11-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash