草庐IT

虚拟空间

全部标签

c++ - 在此上下文中如何使用 CRTP 删除虚拟方法?

我有以下类似于我的代码库的程序。执行某种算法(可能在多个线程中)的FunctionState类,以及控制FunctionState类如何使用的Function类,并可能执行一些算法设置/拆卸操作。#include#includeclassFunctionState;classFunction{public:virtualFunctionState*NewFunctionState()=0;protected:std::vectorstates;};classFunctionState{public:FunctionState(Function*func):mFunc(func){}vi

c++ - 通过命名成员调用虚拟与地址或引用的区别

更新如下:在clang中,通过其名称使用多态对象的左值不会激活虚拟分派(dispatch),但会通过其地址激活。对于下面的基类B和派生D,虚函数something,unionSpace#includeusingnamespacestd;structB{void*address(){returnthis;}virtual~B(){cout如果您的s值为Space,在Clang++中:(更新:错误地声称g++具有相同的行为)如果您执行s.b.something(),将调用B::something(),而不是对s.b执行动态绑定(bind),但是,如果您调用(&s.b)->something

c++ - 如何在没有确切类型信息的情况下从 void* 转换为虚拟基类?

这个问题在这里已经有了答案:Conversionfromvoid*tothepointerofthebaseclass(4个答案)关闭5年前。classA:publicX;classB:publicvirtualA;classC:publicvirtualA;classD1:publicB,publicC;classD2:publicB,publicC;void*p1=newD1;//afterstoringthepointers,void*p2=newD2;//therewillbenoexacttypeinfo.A*pA1=(A*)p1;//Cast1A*pA2=(A*)p2;X*

c++ - 从虚拟堆栈评估可变参数

我正在制作一个基于字节码脚本的小型堆栈引擎,以了解C++中的嵌入式脚本。目标是能够注册任何std::function由脚本调用。我现在拥有的基本上是classBytecode{private:Stackstack;//Functionstobecalledfromscript.//Whenafunctioniscalled,itsargumentsareexpectedtobeinthestack.std::vector>ops;public://RegisterC++functiontobecalledbyscripttemplatestd::size_tfunction(Funcf

c++ - 将 `_[a-z0-9]`开头的标识符以 `using`导入全局命名空间是否定义明确?

整个问题都符合标题。C++14[global.names]是这样说的Eachnamethatbeginswithanunderscoreisreservedtotheimplementationforuseasanameintheglobalnamespace.但我不太清楚是否遵循namespaceN{void_foo(){}}usingN::_foo;是否违反规则。 最佳答案 这不是很明显吗?您的代码将一个以下划线开头的名称放入全局namespace,这些名称保留供实现使用。不要那样做。如果实现在全局命名空间中有_foo,这将产生

C++ 命名空间约定

我是C++新手。我有一个包含以下内容的文件:namespaceA{namespaceB{functionfoo(){}}functionbar(){}}另一个文件有以下内容:namespaceA{namespaceC{//Callfoo()andbar()here.}}如果我想在命名空间C中调用foo和bar,我应该包括它们的绝对命名空间吗?A::B::foo();A::bar();或者我不必包含命名空间A,因为它们都在A中?B::foo();bar(); 最佳答案 这是一个namelookup问题。所以如果你读过这篇文章,你就会知

c++ - 了解虚拟继承类 vtables 和 vptr 创建

下面的代码是多重继承的,每个类都有一个成员变量,一个普通函数和一个虚函数。classbasec{intx;public:basec(){x=0;}voidprint(){}virtualvoidxyz(){}};classderivedc:publicvirtualbasec{intdc;public:derivedc(){dc=0;}virtualvoidxyzdc(){}};classderivedd:publicvirtualbasec{intdd;public:derivedd(){dd=0;}virtualvoidxyzdd(){}};classchild:publicder

C++ 命名空间未声明但它是?

我遇到了编译时问题。C++的新手,所以我确信它很简单。我正在解决当前错误。diarydb.cpp:Infunction‘booleditdate(int,mysqlpp::Connection&)’:diarydb.cpp:413:error:‘format_tests’hasnotbeendeclared但是diardby.cpp我在这里声明了format_testsnamespaceformat_tests{booltestdateformat(string&date);booltesettimeformat(string&time);boollengthcheck(string&

c++ - 跨命名空间重载函数是否一定很困难?

我一直在用这种结构写一些代码namespaceutil{voidread(int&);templatevoidread(T&);}voidfoo();usingnamespaceutil;namespace{//Avoidread(MyType&,int);voiddo_something(){MyTypet;inti;//usingutil::read;//Bread(i);//Cread(t,i);//D}}voidfoo(){do_something();}起初C行没有编译,除非我将它完全限定为util::read(i)或未注释的B行,但这使得D行失败。特化模板util::rea

c++ - 在我的命名空间中公开外部库类时使用 typedef 或 using 关键字

我想将外部库中的类公开给我库的用户。具体来说,我想将类“导入”到我的命名空间中,这样用户就不需要知道我在幕后使用的是什么库。通常,我似乎可以通过使用typedef或简单地通过using类来完成此操作。是否有任何理由选择一种方法而不是另一种方法(或做其他事情)?(我的学历好像有点差距:))例如:我想创建一个使用Boost::Asio的串口管理器。namespaceMySerialManager{//shouldIuseatypedeftypedefboost::asio::serial_port_base::flow_controlflow_control;//orausing...us