C STL type_traits问题
发布时间:2020-12-16 06:45:37 所属栏目:百科 来源:网络整理
导读:我正在观看最新的 C9 lecture并发现一些有趣的东西.. 在他对type_traits的介绍中,Stephan使用了以下(正如他所说的,做作的)示例: template typename T void foo(T t,true_type){ std::cout t " is integral";}template typename T void foo(T t,false_type){
我正在观看最新的
C9 lecture并发现一些有趣的东西..
在他对type_traits的介绍中,Stephan使用了以下(正如他所说的,做作的)示例: template 这看起来要复杂得多: template 这样做的方法有问题吗?他的方式更好吗?为什么? 谢谢. 解决方法
下面的例子应该说明不同之处.让我们添加struct X:
struct X { X(int) { } }; 并修改一个foo如下: template <typename T> void foo(T t,true_type) { std::cout << t << " is integral"; X x(t); } template <typename T> void foo(T t,false_type) { std::cout << t << " is not integral"; } 然后: template <typename T> void bar(T t) { foo(t,typename is_integral<T>::type()); } 仍然会为所有T类型编译(包括整数类型;它可能会导致警告,但会编译). 其他等效代码: template <typename T> void foo(T t) { if(std::is_integral<T>::value) { std::cout << "integral"; X x(t); } else std::cout << "not integral"; } 通常会无法编译,因为您将无法为其他类型实例化X,而最终浮点和用户定义的类具有运算符int()(运算符short()或运算符long()将不会). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |