草庐IT

封装和static

全部标签

c++ - 引用 static_cast 的引用和指向 static_cast 指针的指针的成本

对引用static_cast的引用是否与指向指针static_cast的指针具有相同的运行时间成本?例如classB;classA:publicclassB;Aobj;A&ref=obj;A*ptr=&obj;//1static_cast(ref);//2static_cast(ptr); 最佳答案 不,它们并不总是具有相同的成本。启用优化后,它们总是具有相同或非常接近相同的成本。如果您向上或向下转换继承层次结构,其中任何一个涉及多重继承,或者一个多态类继承自一个非多态类,然后指针的static_cast可能会产生condition

c++ - 关于 ints 和 static_assert 的特化

我想编写一个仅适用于2个数字(例如3和5)的模板函数,如果您尝试将其与其他数字一起使用,则会出现错误。我可以这样做:templatevoidf();templatevoidf(){cout()\n";}templatevoidf(){cout()\n";}然后我可以用正常的方式调用这个函数:f();f();它编译得很好,如果我尝试错误地使用我的函数:f();编译器给我一个错误。这种方法有两个问题:1.-这是标准吗?我可以使用整数专门化模板吗?2.-我不喜欢使用这种方法时出现的错误,因为错误不会告诉用户他做错了什么。我更喜欢写这样的东西:templatevoidf(){static_as

c++ - 构造函数的初始化列表之前的 static_assert

有一个非模板化的类,它有一个模板化的构造函数。是否可以在此类构造函数中初始化成员变量之前检查静态断言?​​例如,下面的代码在检查T是否有这样的方法之前执行T::value()。classMyClass{public:templateMyClass(constT&t):m_value(t.value()){static_assert(HasValueMethod::value,"Tmusthaveavalue()method");}private:intm_value;};将static_assert放在构造函数的主体中工作正常,除了它在最后打印“Tmusthaveavalue()met

c++ - 提取原始数据,然后将其传递给另一个类——如何在保持封装的同时避免复制两次?

考虑一个classBook使用classPage的STL容器.每个Page拿着截图,比如page10.jpg在原始vector形式。ABook使用包含这些屏幕截图的zip、rar或目录的路径打开,并使用相应的方法提取原始数据,如ifstreaminFile.read(buffer,size);,或unzReadCurrentFile(zipFile,buffer,size).然后调用Page(constchar*stream,intfilesize)构造函数。现在,很明显原始数据被复制了两次。一次解压到Book的本地buffer第二次在PagePage::vector的构造器.有没有办

c++ - 如何访问封装在类中的未命名的 "enum class"?

classA{public:enumclass{HELLO,WORLD};};知道了,在class中,声明一个简单的enum(而不是enumclass)是一个更好的主意,因为它已经使用class标识键入。但上面的语句仍然是一个有效的C++0x签名。现在如何访问外部未命名的enumclass?inti=A::HELLO;//error:‘HELLO’isnotamemberof‘A’ 最佳答案 实际上,这是无效的。C++0xFDIS说(9.2p1)Exceptwhenusedtodeclarefriends(11.3)ortointr

c++ - 如何在haskell中封装对象的构造函数和析构函数

我有Haskell代码,它需要与C库接口(interface),有点像这样://MyObject.htypedefstructMyObject*MyObject;MyObjectnewMyObject(void);voidmyObjectDoStuff(MyObjectmyObject);//...voidfreeMyObject(MyObjectmyObject);原始FFI代码使用unsafePerformIO将所有这些函数包装为纯函数。这导致了错误和不一致,因为操作的顺序未定义。我正在寻找的是一种在Haskell中处理对象的通用方法,而无需求助于IO中的所有操作。最好是我可以做类

C++1y/C++14 : Converting static constexpr array to non-type template parameter pack?

假设我有一个静态存储持续时间的constexpr数组(已知范围):constexprTinput[]=/*...*/;我有一个需要打包的输出类模板:templatestructoutput_template;我想像这样实例化output_template:usingoutput=output_template;一种方法是:templatestructmake_output_template{templatestaticconstexproutput_templatef(std::index_sequence){return{};};usingtype=decltype(f(std::m

c++ - 向上转换时的隐式转换与 static_cast

假设我有三个类:A(母亲,抽象),B和C,A的child。所以B和C继承自A(公有继承)。我有一个指向A的指针列表,我用B或C的指针填充它。问题是:在进行转换/转换时,哪种风格是首选?classA{};classB:publicA{};classC:publicA{};B*objB=newB();C*objC=newC();std::listmyList;//OptionA:staticcastconversionmyList.push_back(static_cast(objB));myList.push_back(static_cast(objC));//OptionB:impli

FPGA实战 -- UART --- 封装UART IP核

系列文章目录FPGA基础–通信协议—了解UART以及电脑串口环境准备FPGA实战–UART—实现串口回环(加FIFO)文章目录系列文章目录前言一、代码(1)tx(2)rx(3)ctrl(4)fifo.v(5)top二、IP封装流程(1)创建工程(2)打开PlatformDesigner(3)双击NewComponent(4)修改IP名字(5)添加.v以及头文件(6)引脚分组1、点击“addinterface”添加接口2、改变接口类型(7)quartus检测IP核三、调用方法总结前言咱们已经学习了UART协议,并且编写了串口回环的代码。每次一些项目遇到串口的时候都要对RX或者TX代码进行修改,像

c++ - 应该用 typedef 触发 static_assert 吗?

我注意到当实例化为typedef时,类模板中的静态断言不会被触发。#includetemplatestructtest_assert{static_assert(std::is_same::value,"shouldfail");};typedeftest_assertt;这段代码编译没有错误。如果我尝试创建一个实例,则断言失败:tobj;//error:staticassertionfailed:"shouldfail"最后,如果我将条件替换为false,即使我不实例化类模板,断言也会失败:templatestructtest_assert{static_assert(false,"