草庐IT

method-resolution-order

全部标签

C++ map<char, static method pointer>?

这个问题在这里已经有了答案:Howtocreateclassobjectsdynamically?(3个答案)关闭7年前。我已经编写了一个非常基本的表达式解析器,我希望它是可扩展的,以便它可以解析用户定义的表达式类型。例如,如果在解析时遇到字符,我想创建一个用于解析以此字符开头的表达式的类的实例。我有两个问题:如何将字符关联到静态方法指针?我想使用一个静态方法来返回类的一个新实例,因为我无法获得指向类构造函数的指针。以下语法可能是错误的,但这就是想法:typedefstaticIValue*(*returnPtrIValue)();map...假设我有A类,B类扩展了A类,我可以初始化

c++ - "pure virtual method called"实现 boost::thread 包装器接口(interface)时

我有一个小包装器,它集中了与线程相关的内容:classThread{protected:boost::thread*m_thread;virtualvoidwork()=0;voiddo_work(){work();}public:Thread():m_thread(NULL){}virtual~Thread(){catch_up();deletem_thread;}inlinevoidcatch_up(){if(m_thread!=NULL){m_thread->join();}}voidrun(){m_thread=newboost::thread(boost::bind(&Thr

c++ - 比较rdtsc clock和c++11 std::chrono::high_resolution_clock产生的时间测量结果

我正在尝试比较由c++11std::chrono::high_resolution_clock和下面的rdtsc_clock时钟测量的时间。从high_resolution_clock,我得到类似11000、3000、1000、0的结果。从rdtsc_clock,我得到134、15、91等。为什么他们的结果看起来如此不同?根据我的直觉,我相信rdtsc_clock正在呈现~accurate结果,对吗?templatestructrdtsc_clock{typedefunsignedlonglongrep;typedefstd::ratioperiod;typedefstd::chron

c++ - 用于取消标志的 std::atomic_bool:std::memory_order_relaxed 是正确的内存顺序吗?

我有一个从套接字读取并生成数据的线程。每次操作后,线程都会检查一个std::atomic_bool标志以确定它是否必须提前退出。为了取消操作,我将取消标志设置为true,然后在工作线程对象上调用join()。线程和取消函数的代码如下所示:std::threadwork_thread;std::atomic_boolcancel_requested{false};voidthread_func(){while(!cancel_requested.load(std::memory_order_relaxed))process_next_element();}voidcancel(){can

c++ - 多线程程序中的 std::atomic<int> memory_order_relaxed VS volatile sig_atomic_t

volatilesig_atomic_t是否提供任何内存顺序保证?例如。如果我只需要加载/存储一个整数,可以使用吗?例如这里:volatilesig_atomic_tx=0;...voidf(){std::threadt([&]{x=1;});while(x!=1){/*waiting...*/}//done!}这是正确的代码吗?在某些情况下它可能不起作用?注意:这是一个过度简化的示例,即我不是在为给定的代码片段寻找更好的解决方案。我只想了解在根据C++标准的多线程程序中,我可以从volatilesig_atomic_t中得到什么样的行为。或者,如果是这种情况,请理解行为未定义的原因。

C++ : Calling a child method from parent instantiation

在我的代码中,我实现了这些类:classA{public:virtualintfun(){return0;}}classB:publicA{public:virtualintfun(){return1;}}还有这些函数:voidoperation(Aa){printf("%d\n",a.fun());}intmain(){Bb;operation(b);return0;}可以看到,B类继承了A类,并实现了虚继承方法fun()。主类调用一个以A为参数的函数,并调用fun()方法,参数为B对象。在执行时,我希望打印字符串"1",但它是"0"(即使它是传递给的B对象操作()).我需要这样做,

c++ - 对原子类 : memory_order_relaxed 感到困惑

我正在研究这个网站:https://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync,这对理解关于原子类的话题非常有帮助。但是这个放松模式的例子很难理解:/*Thread1:*/y.store(20,memory_order_relaxed)x.store(10,memory_order_relaxed)/*Thread2*/if(x.load(memory_order_relaxed)==10){assert(y.load(memory_order_relaxed)==20)/*assertA*/y.store(10,memory_order_rela

c++ - 理解c++代码; *datatype 和 classname::method 是什么意思?

我是C++的新手,我想了解一些代码。在数据类型前面加一个*是什么意思?为什么方法名前面是类名CAStar::LinkChildvoidCAStar::LinkChild(_asNode*node,_asNode*temp){} 最佳答案 数据类型前面的*表示变量是指向数据类型的指针,在本例中是指向节点的指针。不是将整个“节点”的拷贝传递到方法中,而是传递内存地址或指针。有关详细信息,请参阅PointersinthisC++Tutorial.方法名前面的类名说明这是定义CAStar类的一个方法。有关详细信息,请参阅Tutorialpa

c++ - 编译器首先返回 "synthesized method ‘operator=’ 此处需要”

我知道这可能是一个简单的问题,但过去一个半小时我一直在研究它,我真的迷路了。这里是编译错误:synthesizedmethod‘File&File::operator=(constFile&)’firstrequiredhere我有这段代码:voidFileManager::InitManager(){intnumberOfFile=Settings::GetSettings()->NumberOfFile()+1;for(unsignedinti=1;i_files如果在此header中定义:#pragmaonce//C++Header#include//CHeader//local

C++11:memory_order_relaxed 和 memory_order_consume 的区别

我现在正在学习C++11memoryordermodel并想了解memory_order_relaxed和memory_order_consume之间的区别。具体来说,我正在寻找一个无法将memory_order_consume替换为memory_order_relaxed的简单示例。有一个优秀的post它详细阐述了一个简单但非常具有说明性的示例,其中可以应用memory_order_consume。以下是文字复制粘贴。例子:atomicGuard(nullptr);intPayload=0;制作人:Payload=42;Guard.store(&Payload,memory_orde