C++11 提供了许多的类型特征和型别实用函数。
1 declval
01122 /// declval
01123 template<typename _Tp>
01124 struct __declval_protector
01125 {
01126 static const bool __stop = false;
01127 static typename add_rvalue_reference<_Tp>::type __delegate();
01128 };
01129
01130 template<typename _Tp>
01131 inline typename add_rvalue_reference<_Tp>::type
01132 declval() noexcept
01133 {
01134 static_assert(__declval_protector<_Tp>::__stop,
01135 "declval() must not be used!");
01136 return __declval_protector<_Tp>::__delegate();
01137 }
Utility to simplify expressions used in unevaluated operands(such as the operands ofsizeof
anddecltype
)..
返回右值引用,用于不求值的操作,使得在不需要指定构造函数的额情况下使用它的成员函数。因为他是一个无值环境所以你不能对他进行求值操作。例如:
// declval example
#include <utility> // std::declval
#include <iostream> // std::cout
struct A { // abstract class
virtual int value() = 0;
};
class B : public A { // class with specific constructor
int val_;
public:
B(int i,int j):val_(i*j){}
int value() {return val_;}
};
int main() {
decltype(std::declval<A>().value()) a; // int a
std::cout <<std::declval<A>().value()<< '\n'; //出错,编译不成功
decltype(std::declval<B>().value()) b; // int b
decltype(B(0,0).value()) c; // same as above (known constructor)
std::cout<<c<<std::endl; // a = b = B(10,2).value(); std::cout << a << '\n'; //输出:20 return 0;}
2 common_type
1788 /// common_type
1789 template<typename... _Tp>
1790 struct common_type;
1791
1792 // Sfinae-friendly common_type implementation:
1793
1794 struct __do_common_type_impl
1795 {
1796 template<typename _Tp, typename _Up>
1797 static __success_type<typename decay<decltype
1798 (true ? std::declval<_Tp>()
1799 : std::declval<_Up>())>::type> _S_test(int); //转换成共同类型的核心,使用三目运算符自动转换成共同类型,这里使用的是隐式转换
1800
1801 template<typename, typename>
1802 static __failure_type _S_test(...); //?
1803 };
1804
1805 template<typename _Tp, typename _Up>
1806 struct __common_type_impl
1807 : private __do_common_type_impl
1808 {
1809 typedef decltype(_S_test<_Tp, _Up>(0)) type;
1810 };
1811
1812 struct __do_member_type_wrapper
1813 {
1814 template<typename _Tp>
1815 static __success_type<typename _Tp::type> _S_test(int);
1816
1817 template<typename>
1818 static __failure_type _S_test(...);
1819 };
1820
1821 template<typename _Tp>
1822 struct __member_type_wrapper
1823 : private __do_member_type_wrapper
1824 {
1825 typedef decltype(_S_test<_Tp>(0)) type;
1826 };
1827
1828 template<typename _CTp, typename... _Args>
1829 struct __expanded_common_type_wrapper
1830 {
1831 typedef common_type<typename _CTp::type, _Args...> type;
1832 };
1833
1834 template<typename... _Args>
1835 struct __expanded_common_type_wrapper<__failure_type, _Args...>
1836 { typedef __failure_type type; };
1837
1838 template<typename _Tp>
1839 struct common_type<_Tp>
1840 { typedef typename decay<_Tp>::type type; };
1841
1842 template<typename _Tp, typename _Up>
1843 struct common_type<_Tp, _Up>
1844 : public __common_type_impl<_Tp, _Up>::type
1845 { };
1846
1847 template<typename _Tp, typename _Up, typename... _Vp>
1848 struct common_type<_Tp, _Up, _Vp...>
1849 : public __expanded_common_type_wrapper<typename __member_type_wrapper<
1850 common_type<_Tp, _Up>>::type, _Vp...>::type
1851 { };
这段代码还是不甚理解,只知道他是一个递归定义解决可变参数的问题,真正求共同类型使用的条件运算符?:,所使用的还是隐式转换。(待跟进...)
分享到:
相关推荐
在标题"stander-input-output.rar_LPC2103_lpc2103 x"中,关键词"stander-input-output"指代的是标准输入输出(Standard Input Output,简称stdio),这是计算机科学中的基本概念,涉及程序与用户之间的交互。...
本篇文章将详细介绍标题中提及的三个框架包:JSTL(JavaServer Pages Standard Tag Library)、Standard以及Mysql-connector-java。 1. JSTL(JavaServer Pages Standard Tag Library): JSTL 是一套用于Java...
Apache的JSTL(JavaServer Pages Standard Tag Library)和Standard包是Java Web开发中的关键组件,主要用于增强JSP页面的功能性和可维护性。在描述中提到的“连接数据库”是JSTL的一部分功能,它通过引入特定的标签...
AEC-Q100标准是汽车电子领域内用于集成电路(IC)可靠性测试和验证的关键文档。这份由汽车电子委员会(Automotive Electronics Council, AEC)制定的标准,详细规定了基于故障机制的应力测试资格认证流程,旨在确保...
rancher-devops服务档案说明stander stander-rancher-pipeline.yaml rancher stander-rancher-pipeline.yaml :Rancher专用管道样板rancher-pipeline-example.ipynb :开发者教学说明档案pipeline-simulator.sh :...
2.1.2 加扰器和解扰器(Scrambler and Descrambler) 描述数据加扰和解扰过程,以减少传输过程中的干扰和信号损失。 2.1.3 编码器和解码器(Encoder and Decoder) 详细说明在发送端对数据进行编码的过程,以及在...
MATLAB 编写,通过栅格图像实现camera参数的确定,可用来确定未知camera的参数或图像矫正。 该程序出自:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html
例如,如果要添加一个名为"bltvmstr103"的TVM服务器监控,项目名为"Stander Monitor",监控配置文件名为"Test",已确保该项目在Performance Center中初始化,那么可以在"MI_LRDB"数据库上执行如下SQL: ```sql Exec...
JSTL(JavaServer Pages Standard Tag Library)是Java服务器页面的标准标签库,它提供了一系列的标签来简化JSP开发,使得开发者能够使用预定义的标签进行常见任务,如控制流程、数据处理和I/O操作,而无需编写大量...
14. "stander-by" 指旁观者,复数形式为"standers-by",但在名词所有格形式下,"standers-by's" 关于事故的调查。但题目中没有给出所有格形式,故直接使用"standers-by"。正确答案是A. standers-by。 通过这些练习...
语言:slovenský ... 它不包含snig Web Stander - 您需要从单独的安装包中安装。 Disig Web签名者旨在签署Web门户环境中的电子签名保证的文档。 例如,应用程序可以在门户网站https://zep.disig.sk/ 上使用
- DVD STANDER:DVD支架,用于固定DVD播放器或其他光盘驱动器的部分。 - ESD:静电放电,对于电子产品来说,静电放电的防护非常关键,以避免电路因静电而损坏。 - PAPER HOLDER:纸张夹具,可能是指产品设计中用于...
stander programming for the matlab which is very seful to find the exact result
3. **JSTL**:JavaServer Pages Standard Tag Library(JSTL)提供了一组标签库,简化了在JSP页面中处理常见任务,如循环、条件判断、国际化等。 4. **EL**:Expression Language(EL)允许在JSP页面中通过简洁的...
《Java编程规范详解》 在软件开发领域,代码质量至关重要,而编码规范是保障代码质量的重要基石。本文将深入探讨Java编程规范,并结合提供的资源,如`Java Coding Standard.doc`,以及配置文件`iisi-Formatter.xml`...
Unity3D是一款强大的跨平台游戏开发引擎,广泛用于创建3D和2D游戏、互动体验以及可视化应用。Shader是Unity3D中一个至关重要的部分,它控制着游戏对象的渲染效果,如颜色、光照、纹理等。源码的学习对于深入理解...
该文档提及了多名博士,例如Nielen Stander博士、Willem Roux博士、Anirban Basudhar博士、Trent Eggleston博士、Tushar Goel博士和Ken Craig博士,他们在2014年6月共同编写了这份手册。手册中不仅包含了产品介绍和...
7. **名词复数**:"stander-by"是旁观者的单数形式,复数为"standers-by"。所以正确答案是D."standers-by"。 8. **代词指代**:"it"在此处指代"A fitting our actions to those of other people appropriately",即...
### VMware vSphere 5.0 版本差异详解 #### 一、概述 VMware vSphere 5.0 是一款引领虚拟化领域的旗舰产品,它提供了三种不同的版本以满足不同规模企业的多样化需求:标准版(Standard)、企业版(Enterprise)和企业...
- **随SIMATIC STEP7一起安装**:如果已经安装了STEP7,则可以选择STANDER模式来安装DriveES Basic作为其附件。 - **单独安装**(未安装STEP7的情况下):可以选择STANDERALONE模式进行单独安装。 安装DriveES ...