草庐IT

虚拟空间

全部标签

c++ - 在具有菱形继承和虚拟基类的类中调用函数的策略

如果我们有菱形继承并使用公共(public)虚拟基类,我们可以阻止第一个构造函数被多次调用。现在,我想对构造函数之外的函数做同样的事情。例如代码:#includestructA{virtualvoidfoo(){std::cout产生结果ABACD我想修改它,让它只产生ABCD什么样的策略或模式可以做到这一点?编辑1与以下相比,我更喜欢TonyD的回答。尽管如此,理论上可以使用另一个类的构造函数来定义适当的函数层次结构。具体#includestructA;structB;structC;structD;namespacefoo{structA{A(::A*self);};structB

c++ - 简单虚拟机安全、高效的底层数据类型

前段时间我创建了一个简单的模拟计算机。它有外围设备、可以渲染为OpenGL纹理的屏幕缓冲区,以及其他一些简洁的功能。它运行良好,运行良好,总的来说我很满意。除了,我作弊了。底层数据类型是整数、float和指令类型的union(拆分为位字段)。对于任何正确的(模拟的)程序,union总是被安全地使用,只从写入的最后一个union成员读取。但是,格式错误的程序(例如从模拟硬盘驱动器加载)可能会乱序访问成员,这可能会使我面临与union滥用相关的常见问题:可以在编译时优化写入的可能性——编译器可能没有足够的信息来尝试这种优化从union中读取的值可能是垃圾-这对我来说是完全可以接受的行为。以

c++ - 在不膨胀命名空间的情况下在 C++ 中声明枚举的好方法

我注意到如果我使用MicrosoftVisualStudioExpress2013在C++中执行类似的操作:namespaceLogLevelEnum{enumType{ALL,FINEST,FINE,INFO,WARNING,SEVERE,OFF};}typedefLogLevelEnum::TypeLogLevel;我可以使用诸如LogLevel::INFO和LogLevel::WARNING之类的东西来访问enum项,但不是简单地执行信息或警告。我喜欢这种方式,因为它不会将尽可能多的符号放入包含的命名空间中。但是,我想知道这是否是标准行为。我知道可以使用::运算符对类和命名空间进

c++ - 未命名的命名空间

有如下代码:#includeusingnamespacestd;namespace{intfunkcja(){cout我使用g++。在这种情况下,有没有办法从未命名的命名空间调用函数?可以使用::function从全局范围调用函数,但是如何从未命名的命名空间调用函数?编译器生成错误:prog3.cpp:Infunction‘intmain()’:prog3.cpp:43:17:error:callofoverloaded‘funkcja()’isambiguousprog3.cpp:32:5:note:candidatesare:intfunkcja()prog3.cpp:25:6:n

c++ - 模板化的 Pointer 类可以有一个虚拟析构函数吗?

在使用自制指针类实现pimpl惯用语时,我遇到了一个令人惊讶的启示(我知道:为什么要自己动手?但请耐心等待)。以下三个文件包含一个最小示例:指针.h:#pragmaoncetemplateclassPointer{public:Pointer(T*p=0):_p(p){}virtual~Pointer(){delete_p;}private:voidoperator=(constPointer&);Pointer(constPointer&);private:T*_p;};Foo.h:#pragmaonce#include"Pointer.h"structFoo{Foo();~Foo(

c++ - 为了保持全局空间空闲,我应该在哪里放置我的类需要的常量?

首先:我知道如何编写程序,所以我不会寻求帮助。但是,我正在粘贴该问题的拷贝,以便您了解作业的内容。我的问题专门针对您将变量放在哪里以防止将所有内容都全局化?作业设计一个名为Date的类,该类具有用于存储月、日和年的整数数据成员。该类应该有一个三参数默认构造函数,允许在创建新的Date对象时设置日期。如果用户创建一个Date对象而不传递任何参数,或者传递的任何值无效,则应使用默认值1、1、2001(即2001年1月1日)。该类应具有成员函数以下列格式打印日期:3/15/10March15,201015March2010问题1)老师指导我们避免在代码中使用魔数(MagicNumber),所

c++ - 成员模板函数不能是虚拟的 - 解决方法?

我明白为什么membertemplatefunctionscannotbevirtual,但我不确定最好的解决方法是什么。我有一些类似的代码:structEntity{templatevirtualItGetChildren(Itit){returnit;}};structPerson:publicEntity{templatevirtualItGetChildren(Itit){*it++="Joe";}};structNode:publicEntity{Nodeleft,right;constchar*GetName(){return"dummy";}templatevirtual

c++ - 函数模板在另一个类/命名空间中的特化?

注意:这个问题与tinyxml的关系不大,但是包括这样的细节可能有助于更好地说明这个概念。我编写了一个函数模板,它将遍历父XML节点子节点,检索子元素的值,然后将该子元素值推送到vector。“取值”部分也写成一个函数模板:即templateTypegetXmlCollectionItem(constchar*elementName,TiXmlNode*child,TiXmlNode*parent);检索部分有特殊化,用于返回不同类型的子元素值,例如std::string和其他自定义对象。即templatestd::stringgetXmlCollectionItem(constcha

java - 它们真的是虚拟代码吗?

与C++/C相比,shift、[、]、Del等某些键的虚拟键代码在java中显示为不同的值。例如:KeyJavaC/C++Shift16160[91219]93221\92220Del12746Window52491这是什么原因?这些代码是虚拟代码还是不同类型?对于包括字母、数字、功能键(F1-F12)、退格键、`等在内的键都是相同的。我可能误解了一个概念,在那种情况下请澄清。已在C/C++中checkinKBDLLHOOKSTRUCT*kbhook=(KBDLLHOOKSTRUCT*)lParam;printf("%u\n",kbhook->vkCode);在Java中检查priva

c++ - 命名空间 'forward' 中没有名为 'std' 的成员

最近在XCode中制作并测试了一个使用boost的处理库。我刚刚在IDE中设置了一个基本项目,进行了编码,并且构建良好。我现在想在另一个应用程序中使用该库。另一个应用程序的xcode项目是使用第3方工具自动创建的。当我尝试将我的基于boost的库包含在这个其他应用程序中时,我收到错误提示...命名空间“std”中没有名为“forward”的成员还有,线。.#include给出预处理器错误未找到“元组”文件看到原始库在我的机器上构建得很好,错误一定是build设置的差异,但我看不到差异,也不知道比较2个不同的build设置的好方法项目。任何人都可以建议可能导致我出现问题的build设置吗