我很困惑使用的优点
bool_<true>
和
bool_<false>
类型反对在模板元编程的上下文中简单地使用const bools.
boost :: mpl库显然更喜欢第一种方法,并定义了类似于and_或or的帮助函数来帮助管理这样的bool_.条件元函数,如if_“取”bool_作为第一(模板)参数,但在幕后“调用”一个if_c Metafunction希望一个(const)bool作为第一(模板)参数.
这个决定背后的论点是什么?
预先感谢您的帮助!
解决方法
这是一个简短的例子,我如何使用这些类型.这个例子是不可能的,使用const bool:
void do_something(boost::mpl::bool_<true>) { ... } void do_something(boost::mpl::bool_<false>) { ... }
template<class T> void doIt(void) { do_something(boost::mpl::bool_<boost::is_pointer<T>::val>()) }
在这种情况下,将会调用第一个或第二个函数,这取决于类型T是否是指针的事实.这些类型允许您使用函数重载,在那里不可能使用const bool.使用const bool,您必须在运行时决定哪个分支.如果被调用的函数本身是模板,如果它们被实例化为非预期的类型,那么这种模板将无法正确编译,这一点尤为重要.上面的第一个函数定义可能包含只编译指针的代码.
原文地址:https://www.jb51.cc/c/114570.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。