草庐IT

c++ - 如何从模板类 typedef 方法的返回类型?

我有一个模板类Helper看起来像这样:templateclassHelper{public:usingmappedType=...;};我需要mappedType为map(constint&)返回的类型Mapper中的方法类(class)。给定Mapper的有效类型像下面这样:classDMapper{public:doublemap(constint&val){...}};Helper::mappedType应该是double.有没有办法在不实例化Mapper的情况下做到这一点??我得到的最接近的是:usingmappedType=typenamestd::result_of::t

c++ - 确保 C++ double 为 64 位

在我的C++程序中,我需要从外部字节序列中提取一个64位float。有什么方法可以确保在编译时double为64位?我应该使用其他类型来存储数据吗?编辑:如果您正在阅读本文并且实际上正在寻找一种方法来确保以IEEE754格式存储,请查看以下AdamRosenfield的答案。 最佳答案 在C99中,您只需检查预处理器符号__STDC_IEC_559__是否已定义。如果是,那么您可以保证double将是一个用IEEE754(也称为IEC60559)格式表示的8字节值。请参阅C99标准,附件F。不过,我不确定此符号在C++中是否可用。#

c++ - 确保 C++ double 为 64 位

在我的C++程序中,我需要从外部字节序列中提取一个64位float。有什么方法可以确保在编译时double为64位?我应该使用其他类型来存储数据吗?编辑:如果您正在阅读本文并且实际上正在寻找一种方法来确保以IEEE754格式存储,请查看以下AdamRosenfield的答案。 最佳答案 在C99中,您只需检查预处理器符号__STDC_IEC_559__是否已定义。如果是,那么您可以保证double将是一个用IEEE754(也称为IEC60559)格式表示的8字节值。请参阅C99标准,附件F。不过,我不确定此符号在C++中是否可用。#

c++ - 为什么 back_insert_iterator/front_insert_iterator/insert_iterator 的 value_type/difference_type/pointer/reference 都是 void?

在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数templateTOutputIterSplitSpace(std::istream&IS,TOutputIterresult){TElemelem;while(IS>>elem){*result=elem;++result;}returnresult;}我认为这很尴尬,因为我必须在调用时明确给出TElem的类型。例如,我必须写:std::vectorv;SplitSpace(std::cin,back_inserter(v));//IwanttoittobeSplitSpace(std::cin,back_inse

c++ - 为什么 back_insert_iterator/front_insert_iterator/insert_iterator 的 value_type/difference_type/pointer/reference 都是 void?

在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数templateTOutputIterSplitSpace(std::istream&IS,TOutputIterresult){TElemelem;while(IS>>elem){*result=elem;++result;}returnresult;}我认为这很尴尬,因为我必须在调用时明确给出TElem的类型。例如,我必须写:std::vectorv;SplitSpace(std::cin,back_inserter(v));//IwanttoittobeSplitSpace(std::cin,back_inse

c++ - 在 Windows C/C++ 中使用半字节(4 位变量)

我正在编写网络header,许多协议(protocol)使用4位字段。有没有一种方便的类型可以用来表示这些信息?我发现的最小类型是BYTE。然后我必须使用大量的二进制操作来仅引用该变量中的几个位。 最佳答案 由于内存是字节寻址的,你不能寻址任何小于单个字节的单元。但是,您可以构建要通过网络发送的struct并使用bitfields像这样:structA{unsignedintnibble1:4;unsignedintnibble2:4;}; 关于c++-在WindowsC/C++中使用半

c++ - 在 Windows C/C++ 中使用半字节(4 位变量)

我正在编写网络header,许多协议(protocol)使用4位字段。有没有一种方便的类型可以用来表示这些信息?我发现的最小类型是BYTE。然后我必须使用大量的二进制操作来仅引用该变量中的几个位。 最佳答案 由于内存是字节寻址的,你不能寻址任何小于单个字节的单元。但是,您可以构建要通过网络发送的struct并使用bitfields像这样:structA{unsignedintnibble1:4;unsignedintnibble2:4;}; 关于c++-在WindowsC/C++中使用半

c++ - 为什么 scala 没有类似 C++ 的 const 语义?

在C++中。我可以将大多数东西声明为const,例如:变量:constinti=5;斯卡拉有vali=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:C++:constinti[]={1,2,3,4};i[2]=5;//error斯卡拉:vala=Array(1,2,3,4)a(2)=5//aisnowArray(1,2,5,4)成员函数会变得更糟:C++:classFoo{inti;intiPlusFive()const{returni+5;}intincrementI(){return++i;}}我可以肯定,调用iPlusFive不会更改对象,而且我不会意外调用const对

c++ - 为什么 scala 没有类似 C++ 的 const 语义?

在C++中。我可以将大多数东西声明为const,例如:变量:constinti=5;斯卡拉有vali=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:C++:constinti[]={1,2,3,4};i[2]=5;//error斯卡拉:vala=Array(1,2,3,4)a(2)=5//aisnowArray(1,2,5,4)成员函数会变得更糟:C++:classFoo{inti;intiPlusFive()const{returni+5;}intincrementI(){return++i;}}我可以肯定,调用iPlusFive不会更改对象,而且我不会意外调用const对

无法命名的 C++ 类型

阅读时Wikipedia'spageondecltype,我很好奇这个说法,Its[decltype's]primaryintendeduseisingenericprogramming,whereitisoftendifficult,orevenimpossible,tonametypesthatdependontemplateparameters.虽然我可以理解该语句的困难部分,但有什么示例需要命名在C++03下无法命名的类型?编辑:我的意思是,因为C++中的所有内容都有类型声明。为什么会出现无法命名类型的情况?此外,特征类不是旨在产生类型信息吗?特征类可以替代decltype吗?