草庐IT

developer$career$IT

全部标签

C++ 模板编程问题预期 `;' 在 ‘it’ 之前?

我正在编写一小段代码来练习基于策略的模板编程。在这个程序中,定义了一个CDecayer类,它使用DecayerPolicy作为它的策略类。然而,编译器提示"需要`;'在“它”之前关于CDecayer部分。有什么建议吗?#include#include#include#includeintmain(){}structCAtom{};classCStateUpdater{public:virtualvoidUpdateState(CAtom*patom)=0;};structCDecayerPolicy{typedefstd::pairindexpair;std::mapmDecayRat

c++ - 对未知大小数组的引用的列表初始化 : is it supposed to deduce the array size?

以下代码在Clang中编译良好并输出int[3]数组的大小#includeintmain(){constint(&a)[]={1,2,3};std::cout但是,在GCC中,声明编译得很好,但是sizeofa没有:显然GCC拒绝“推断”数组大小并以a作为结尾对constint[]类型的引用,该类型不完整。此类初始化的预期行为是什么?9.3.4/3似乎是此类情况下标准的相关部分,但它本身似乎并不能最终回答这个问题。 最佳答案 标准在这一点上并不完全清楚,我认为GCC的解释很可能是WG21的意图,但我不确定。标准的相关部分是[dcl.

c++ - 将非模板基类向下转换为模板化派生类 : is it possible?

我正在为游戏实现一个事件系统。它使用事件队列和数据结构来保存给定事件类型的所有已注册事件处理程序。到目前为止注册处理程序工作正常,但是当涉及到注销它们时(例如,当游戏对象被销毁时会发生的事情)我在模板和转换方面遇到了一些麻烦。我将EventHandler定义为某种仿函数,部分基于SzymonGatner关于http://www.gamedev.net/reference/programming/features/effeventcpp/的文章.准确地说,我采用了HandlerFunctionBase和MemberFunctionHandler类定义并提出:classBaseEventH

C++ vector 按值 : did I get it right? 传递

假设我有一个这样的结构:structtypeA{longfirst;stringseconddoublethird;};如果我声明typeAmyArray[100];然后myArray存储在堆栈中,消耗sizeof(typeA)*100字节的垃圾数据(至少在我存储一些实际数据之前)。每当我将这个数组作为参数传递时,我总是传递一个指向堆栈中第一个元素的指针。所以指针从一个栈到另一个栈。但是如果我声明vectormyVector(4,100);然后myVector对象实际存储在栈中,它包含一个指针,指向存储在堆中的一个4*sizeof(int)字节的数组的第一个元素,这里是实际存储数据的地

c++ - 对数组 : can it actually happen? 的右值引用

考虑这段代码:#includeusingnamespacestd;typedefintarray[12];arraysample;arrayret1(){//won'tcompilereturnsample;}array&ret2(){returnsample;}array&&ret3(){returnsample;//won'tcompile}voideat(array&&v){cout唯一似乎真正编译的版本是ret3()。事实上,如果我省略实现而只声明它,它会编译(当然永远不会链接),但我真的不知道如何显式返回对数组的右值引用。如果这不可能发生,那么我是否可以得出结论,对数组的右值

c++ - 提升 : is it safe to use multiple recursion in async calls?

我是asio框架的新手,所以请多多关照。我调查了几个boostasio示例,发现人们使用这样的异步调用:voidread(){async_read(socket_,boost::asio::buffer(&user_[0],user_.size()),boost::bind(&Connection::handle_user_read,this,placeholders::error,placeholders::bytes_transferred));}voidhandle_user_read(...){...read();...}我认为这段代码不安全,因为它使用了多重递归。所以当因为调

java - 混合代码( native 、托管): how does it (technically) interoperate?

我基本理解托管代码和native代码的概念及其difference.但是他们之间如何在技术上进行交流呢?想象一下以下示例:我得到了一些为特定平台编译的静态或动态C++库。现在我写了一个JavaProgramm。在这段代码中,我使用“native”关键字调用库函数。我用字节码构建一个jar文件,c++库文件将保持独立。结果将不再与平台无关。但是java程序如何知道调用的本地方法是否存在?整个程序代码是如何在运行时执行的?我知道字节码将用JIT解释或编译。这一切如何适应沙盒范式?native代码是否也在沙箱内执行?是否因为(java和c++)代码最终都是机器码才行得通?也许这是个愚蠢的问题

.net - 将非托管 C++ 与 F# 混合用于物理 : worth it?

我将开始使用DirectXSDK在非托管C++中编写3D游戏。它会涉及很多物理和数学,尽管我无法预测它会有多复杂(例如,我不知道我是否会将它并行化)。我在想,由于F#的incrediblyawesomeunitsofmeasurefeature,以及它的功能性并因此很好地并行化的事实,我可以编写一个F#库来进行游戏的数学密集型计算。但是:我在C++方面缺乏经验,更不用说将它与托管代码进行交互了。我不知道这会有多辛苦。我不知道对于每个数学密集型计算来说,跳入和跳出托管DLL的速度有多大(每次游戏迭代至少必须运行一个物理方程).我不确定测量单位的增益和简单的并行化是否值得。我的意思是,如果

c++ - 模板参数列表中的额外 typename 关键字 : is it valid or not?

以下代码使用clang3.5.0和g++4.9.0成功编译(使用-Wall-Wextra-pedantic-errors标志)在C++03(flag-std=C++03)下,C++11(flag-std=C++11),和C++14(flag-std=C++14):namespaceN{typedefintT;enumE{};}templatestructST{};templatestructSE{};intmain(){}在非类型模板参数声明之前添加额外的typename关键字是否有效?请注意,以下代码无法编译(如C++03、C++11和C++14代码):typedefintT;enu

c++ - boost MPL : Call a (member) function only if it exists

我有一个类A,它有一个模板参数T。有些用例中类T提供函数func1(),有些用例中T不提供它。A中的函数f()应该调用func1(),前提是它存在。我认为这应该可以通过boostmpl实现,但我不知道如何实现。这里有一些伪代码:templateclassA{voidf(Tparam){if(T::func1isanexistingfunction)param.func1();}};如果是else-case会更好:templateclassA{voidf(Tparam){if(T::func1isanexistingfunction)param.func1();elsecout