草庐IT

default-interface-member

全部标签

c++ - 谷歌模拟 : "no appropriate default constructor available"?

将VisualStudio2010C++与googlemock结合使用。我正在尝试使用我创建的模拟,但在线上遇到编译器错误:EmployeeFakeemployeeStub;错误是:1>c:\someclasstests.cpp(22):errorC2512:'MyNamespace::EmployeeFake':noappropriatedefaultconstructoravailable假员工:classEmployeeFake:publicEmployee{public:MOCK_CONST_METHOD0(GetSalary,double());}员工:classEmploy

c++ - 在不更改接口(interface)的情况下向对象添加功能

我有一个对象作为接口(interface)的引用/指针呈现。如果存在该方法,我想在具体对象上调用该方法,而不更改接口(interface)、破坏封装或编写任何可怕的hack。怎么做到的?这是一个例子。我有一个界面:classIChatty{public:virtual~IChatty(){};virtualstd::stringSpeak()const=0;};以及该接口(interface)的多个具体实现:classSimpleChatty:publicIChatty{public:~SimpleChatty(){};virtualstd::stringSpeak()constove

c++ - 切换到C++11时,是否需要重新编译接口(interface)中使用STL的所有依赖库?

我正在尝试将一个大型项目切换为使用C++11。我遇到了大量链接器错误,这些错误似乎是由使用C++11编译的库和使用C++03编译的库之间的STL类上不匹配的命名空间引起的。例如,假设库B是A的依赖项。B具有以下模板化类作为其接口(interface)的一部分。templateclassVectorParameter{public:VectorParameter();virtual~VectorParameter();...}库A使用VectorParameter>实例化模板.当我用C++11重新编译A而没有重新编译B时,我遇到了链接器错误并提示LFE::VectorParameter>

c++ - 何时使用 =default 与 =delete

据我了解,这些语义仅用于复制构造函数、移动构造函数、复制赋值、移动赋值和析构函数。使用=delete用于禁止使用其中一项功能,即=default如果您想向编译器明确说明在何处使用这些函数的默认值,则使用它。在制作类(class)时使用这些关键字的最佳做法是什么?或者更确切地说,在开发类(class)时我如何记住这些?例如,如果我不知道我是否会使用这些功能之一,最好用delete禁止它。或允许并使用default? 最佳答案 好问题。同样重要的是:哪里使用=default和=delete.我对此有一些有争议的建议。它与我们所有人(包括

c++ - 通过采用 void * 的 C 接口(interface)传递 shared_ptr

我有一个使用SDL的C++项目,特别是SDL事件。我想将事件系统用于传入的网络消息,就像它用于UI事件一样。我可以定义一个新的事件类型并附加一些任意数据(参见thisexample)。如果我使用普通指针,这就是我会做的:Uint32message_event_type=SDL_RegisterEvents(1);/*Inthemaineventloop*/while(SDL_Poll(&evt)){if(evt.type==message_event_type){Message*msg=evt.user.data1;handle_message(msg);}}/*Networkingc

c++ - 如何在函数声明中声明 C++ mem_fn(member_function)?

我理解在其类之外传递成员函数地址的基本问题。我觉得mem_fn()可能是解决方案,但我在具体细节上遇到了麻烦。我在类p中有一个成员函数,当前声明为typedefvoid(*valNamedFlagsCallback)(constint,constbool);boolvalNamedFlags(constOptBlk*operand,constchar*description_of_value_or_NULL,constintsubscripts[],constchar*names[],valNamedFlagsCallbackcallBack);在e类中,我试图用调用valNamedF

c++ - "= default"是否允许离线实现?

通常我会在header中看到=default语法。我的理解是,这与函数在header中明确实现是一样的,请参见下面的Foo。Foo.h#pragmaonceclassFoo{public:Foo()=default;Foo(constFoo&other)=default;};纯粹出于好奇,=default可以在源文件中使用如下吗?栏.h#pragmaonceclassBar{public:Bar();Bar(constBar&other);};酒吧.cpp#include"Bar.h"Bar::Bar()=default;Bar::Bar(constBar&)=default;据我所知

c++ - 解决 "only static const integral data members can be initialized within a class"编译错误

以下创建全局对象会导致编译错误。#include"stdafx.h"#includeusingnamespaceSystem;usingnamespacestd;#pragmahdrstopclassTester;voidinput();classTester{staticintnumber=5;public:Tester(){};~Tester(){};voidsetNumber(intnewNumber){number=newNumber;}intgetNumber(){returnnumber;}}TestertesterObject;voidmain(void){cout>ne

c++ - 覆盖接口(interface)中的模板成员

是否可以使用我可以在派生类中覆盖的模板方法来声明某种类型的基类?以下示例:#include#include#includeclassBase{public:templatestd::stringmethod(){return"Base";}};classDerived:publicBase{public:templatestd::stringmethod()override{return"Derived";}};intmain(){Base*b=newDerived();std::coutmethod()我期望Derived作为输出,但它是Base。我假设有必要制作一个模板化包装类,它

c++ - Q_PROPERTY : MEMBER vs READ/WRITE

我正在阅读有关Q_PROPERTY宏的Qt5.5文档,但我无法很好地理解它。我知道您可以在此宏中使用关键字MEMBER或访问器READ/WRITE。如果您使用关键字MEMBER,则不必编写访问器,因为您可以使用setProperty()和Property()访问您的私有(private)数据成员(属性),如set和get。关键是:使用MEMBER和使用READ/WRITE有什么区别吗?什么时候应该使用一种方式,什么时候使用另一种方式?如有必要:使用MEMBER的例子:Q_PROPERTY(QStringtextMEMBERm_textNOTIFYtextChanged)使用读/写的例子