草庐IT

c++ - 是否可以在 C++ 中创建一个占用少于一个字节内存的类型?

对于我的计算,我只需要使用7位空间,所以我使用的是char类型。但是我想知道是否可以声明我自己的使用少于一个字节内存的类型? 最佳答案 不是真的。在结构内部,您可以使用bitfields.因此,如果您知道您将需要一定数量的条目,这将是一种节省一些位的方法(但请注意,该结构将始终至少填充到下一个字节总数)。另请注意,由于“普通”CPU无法处理小于八位位组/字节的数量,因此对这些位字段值的访问可能会更慢,因为编译器必须生成额外的指令来获取/存储值“在中间”。因此,为了节省一些位,您必须花费一些CPU时间。C++11standard在1.

c++ - 如何检查类型是否是 C++ 中模板类的类型参数?

templateclassA{};我需要类似于std::is_same的东西或std::is_base这应该是真实的,例如std::xxxx>::value(因为double是用作模板参数的类型)但对于std::xxxx>::value为false在编译时。如何做到这一点? 最佳答案 您可以执行以下操作:#includetemplatestructis_template_param:std::false_type{};templateclassTemplate,typename...R>structis_template_param

c++ - 不稳定类型特征背后的原因是什么?

我今天正在调试一个失败的clang构建。该构建基本上失败了,因为is_default_constructible评估为false。在将问题一分为二几个小时后,我将问题减少到最小的情况:#include#includenamespaceA{//Thishasbeenextractedfromanold(outdated(?))//implementationofanoptionaltypestructempty_t{};templatestructo{public:template::value,bool>::type=false>o(empty_t,U&&...u){}};}struc

C++在静态函数中获取类类型

在静态成员函数内部,我需要获取类型。classMyClass{public:staticvoidmyStaticFunc();...};然后在实现中我想要:voidMyClass::myStaticFunc(){//GetMyClassasatypesoIcancastusingit(get_type_from_static_function()*)someOtherVariable;}这可能吗?通常我会在对象上使用来自typeinfo的东西,但我没有this可以使用。我不想只使用(MyClass*)因为这是在宏内部进行的,我希望它尽可能简单,这样就可以在没有类的情况下调用它姓名。如果

c++ - 确定数值类型 A 是否可以转换为数值类型 B

给定两个数字类型From和To。以下代码是否真的确定了From类型的任何值是否可以表示为To类型的值而不丢失信息?如果是,是否有更短或更易读的确定方法?templatestructcan_cast{staticconstboolvalue=(std::numeric_limits::is_integer||//eitherFromisanintegertypeORstd::is_floating_point::value)&&//...they'rebothfloatingpointtypesAND(std::numeric_limits::is_signed==false||//ei

c++ - 使用 ffi 将 C++ 数据类型导入 haskell

我正在为c++库编写一个haskell包装器,尽管我可以将函数从库导入到我的haskell程序,但我不知道如何导入c++数据类型。例如,我有一个函数将video::E_DRIVER_TYPEEDT_OPENGL类型作为参数,定义在some.h文件中,正如我之前所说,我知道如何使用ffi导入函数国外进口ccall...使用适当的编译器损坏的函数名但我无法从haskell调用该函数,因为我不知道如何导入/使用这种特定的视频驱动程序数据类型。现在,我知道您可以在Haskell中创建类型,但我仍然需要一个起点来定义类型,无论C++表示是什么。(此时我很困惑)如有任何帮助,我将不胜感激!谢谢

c++ - 如何将 float 转换为非标准编码

我正在编写一个创建ICC颜色格式的程序。这些格式指定了一种称为s15Fixed16Number的数据类型,它具有一个符号位、15个整数位和16个小数位。IEEE75432位float有一个符号位、8个指数位和23个小数位。我需要从文本框中获取输入,并将它们转换为s15Fixed16Number。一些搜索出现了this在谷歌书籍上,但这是在谈论将十进制数转换为s15Fixed16Number。我想我可以只使用链接中解释的方法,但我还没有进行任何测试来确定它的准确性。我想我也可以尝试转换从文本框中输入的字符,但我还没有考虑那么多。我正在使用Cocoa,但我认为这不重要;任何C函数都应该有效

c++ - C++中按位运算符的返回类型

当我为小型数学vector实现模板化类时,我遇到了一个问题。对于算术运算,返回类型为T1lhs+T2rhs是std::common_type::type.但是下面的返回类型是什么(例如T1signed和T2unsigned或者相反,或者T1char和T2unsignedlonglongint等等):T1lhs&T2rhs?T1lhs|T2rhs?T1lhs^T2rhs?T1lhs>T2rhs?非常感谢。 最佳答案 我假设您要对vector执行按位运算。本质上,按位运算是整数运算,我认为没有理由不将它们的结果设为std::common

c++ - {1, 2} 是一个值吗?如果是,它的类型是什么?如果不是,为什么可以将其分配给初始化列表?

#includeusingnamespacestd;templatevoidf(initializer_list){}intmain(){typeid(1);//OKtypeid(int);//OKtypeid(decltype(1));//OKf({1,2});//OKtypeid({1,2});//errordecltype({1,2})v;//errortypeid(decltype({1,2}));//error}{1,2}是一个值吗?如果是,为什么是typeid({1,2});不合法?如果不是,为什么可以赋值给一个initializer_list对象?

c++ - 从 std::string 获取类型,C++

有一次我在面试中被问到一个问题。因此我有一个函数voidf(std::string),我调用一个函数作为这个f("int")。因此我的函数必须在其主体中创建一个本地intx。有没有办法从constchar*获取类型。我知道boost::mpl::vector确实解决了这类问题。谁能告诉我技术? 最佳答案 如果应该支持用户定义的类型,那么不提供显式映射是不可能的。但是对于内置类型,它是可以做到的。您可以为类型定义实现一个解析器,并将其与函数模板结合起来,以迭代方式构造类型。像这样:templatevoidparseType(std::