草庐IT

c++ - Direct3D 11 缺少 GetRasterStatus,如何检测垂直空白期?

我正在更新一个应用程序,在该应用程序中,屏幕上刺激呈现时间的测量需要最大的准确性。目前是用DirectDraw写的,很久以前就放牧了,需要更新我们的图形库。我们测量显示时间的方法是利用检测垂直空白期的结束。具体来说,我需要尽可能准确地知道翻转到主表面(或出现在交换链中)的任何内容何时真正被屏幕绘制。检测扫描线可以增加该测量的确定性,但我只能检测调用Flip或Present后垂直空白期何时结束。Direct3D9具有IDirect3DDevice9::GetRasterStatusMethod返回一个D3DRASTER_STATUS结构,其中包含一个InVBlankbool值,描述设备是

c++ - C++11 有状态分配器是否可以跨类型边界互换?

我的问题基本上是跟进:HowcanIwriteastatefulallocatorinC++11,givenrequirementsoncopyconstruction?基本上,尽管C++11标准现在允许有状态分配器,但我们仍然有要求,如果您复制某个Allocator,拷贝必须通过==比较相等运算符与原件。这表明拷贝可以安全地解除分配由原始分配的内存,反之亦然。所以,这马上就禁止分配器维护唯一的内部状态,例如平板分配器或内存池等。一种解决方案是使用shared_ptr内部状态的指向实现惯用语,以便某些原始的所有拷贝Allocator使用相同的底层内存池。那还不错。除了...根据上面提到

c++ - 新的 C++11 range-for (foreach) 语法 : which compilers support it?

我在thisBoostConpresentationbyJeremySiek中看到了这个c++11代码片段:dequetopo_order;topological_sort(g,front_inserter(topo_order));for(intv:topo_order){//line39cout尝试在gcc中编译时出现以下错误:main.cpp:39:error:expectedinitializerbefore‘:’token这让我想知道,哪些编译器实际上支持这种语法? 最佳答案 好吧,至少GCCsupportsitin4.6

c++ - 在 C++11 中处理可变参数模板

我最近开始使用C++11,并且阅读了有关可变参数模板的教程。我明白我们可以像这样定义一个可变参数模板//exampleclassthatusesvariadictemplatetemplatestructmtuple;但是我该如何处理mtuple的模板参数呢?类(即get(mtuple_obj)会是什么样子?)? 最佳答案 什么get(t)看起来将取决于mtuple的实现.典型的实现递归继承自包含每个参数的类型,因此mtuple继承自TupleHead(它有一个A类型的成员)并且还继承自TupleTail.TupleTail继承自T

c++ - C++11 中弱类型枚举的底层类型

C++11引入了强类型枚举,语法为enumclass。它们与整数类型不兼容,需要显式转换才能获得它们的数值。C++11还引入了为弱类型枚举指定存储类的功能,格式为enumname:type{}。到这里为止都很好。但看起来即使弱类型枚举具有给定的存储类,其项的类型仍然是int。我尝试使用VisualStudio2012,11月CTP版本。考虑以下代码:enumcharEnum:char{A='A'};enumlongEnum:longlong{Tera=1000000000000};voidfct(charval){}voidfct(intval){}voidfct(longlongva

c++ - 为什么 gcc 使用我的自定义迭代器优化掉这个 C++11 foreach 循环?

我正在尝试编写一些代码来创建序列的函数式样式。我写了一个函数,range(a,b),它返回一个你可以迭代的对象,foreach风格,遍历数字a,a+1,...,b-1.然后我写了另一个函数map(f,t),它返回另一个可迭代对象,其中序列中的每个元素都是用相应元素调用f的结果可迭代对象t.如果我使用-O1或更低版本进行编译,这将按预期工作;使用-O2或更高版本时,我的foreach循环(在底部的main中)得到完全优化并且没有打印任何内容。为什么会这样,我做错了什么?这是我的代码:templatestruct_range{Ta;Tb;_range(Ta,Tb):a(a),b(b){}s

c++ - C++11 中的 std::sin 变化?

cppreference包括以下关于thereturnvalueofstd::sin的描述:Theresultmayhavelittleornosignificanceifthemagnitudeofargislarge(untilC++11)我试图在当前的C++标准中找到关于此的信息,但我一无所获(也许我错过了?)。在C++11中关于std::sin到底发生了什么变化? 最佳答案 C++11将C标准引用从C89/C90切换到C99。原来的C标准用于声明(引用自草稿):Thesinfunctioncomputesthesineofx

cereal:支持C++11的开源序列化库

cereal:支持C++11的开源序列化库文章目录一:引言二、cereal简介三、cereal的下载和使用一:引言序列化(Serialization)程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这个将程序数据转化成能被存储并传输的格式的过程被称为“序列化”(Serialization),而它的逆过程则可被称为“反序列化”(Deserialization)。值得推荐的开源C/C++框架和库:https://www.cnblogs.com/lidabo/p/5514155.html二、cereal简介cerea

c++ - 在 C++11 中使用静态变量是否有惩罚

在C++11中,这个:conststd::vector&f(){staticconststd::vectorx{1,2,3};returnx;}是线程安全的。但是,由于这种额外的线程安全保证,在第一次(即初始化时)调用此函数是否有额外的惩罚?我想知道该函数是否会比使用全局变量的函数慢,因为它必须获取一个互斥锁来检查它是否在每次调用时都被另一个线程初始化,或者其他什么。 最佳答案 "Thebestintutiontobeeverhadis'Ishouldmeasurethis.'"所以let'sfindout:#include#inc

c++ - C++11 中的委托(delegate)

C++11是否提供委托(delegate)?如果不是,那么在C++中执行类似操作的最佳(最有效)方法是什么?升压信号?快速委托(delegate)?还有别的吗? 最佳答案 您可以使用bind将成员函数绑定(bind)到类实例,从而获得类似委托(delegate)的语义:#includestructC{voidFoo(int){}};voidBar(std::functionfunc){func(42);//callsobj.Foo(42)}intmain(){usingnamespacestd::placeholders;Cobj;