草庐IT

default-interface-member

全部标签

c++ - 静态多态性对实现接口(interface)有意义吗?

祝大家圣诞快乐!我正在学习静态多态性,并且正在阅读AndreiAlexandrescu关于基于策略的设计的优秀书籍。我在我的代码中遇到了以下情况:我有接口(interface)Interface指定方法Foo必须存在。该接口(interface)将由Impl类实现。我有以下两个选择:1)动态多态classInterface{public:virtualvoidFoo()=0;}classImpl:publicInterface{public:voidFoo(){};}2)静态多态classImpl{{public:voidFoo(){};}templateclassInterface:

MySQL之Field‘***’doesn’t have a default value错误解决办法

目录一、找到mysqlServer文件夹,打开my.ini配置文件,查找如下语句:二、修改成如下:PS:如何找到my.ini文件。第一步右键我的电脑(计算机)——点击管理(G),如下图所示:第二步:点击服务和应用程序----服务选项 第三步:在右边服务中找到mysql之后右键--属性第四步:这样你就可以看到你的mysql的路径了:LAST:做一下总结首先排查一下数据库中对应的字段是否是设置为不能为空,以至数据插入不进去。个人就是这个缘由解决的。下面,说一下遇到相同问题的其余解决办法,方便出现问题的同窗参考:(windows环境)MySql一、找到mysqlServer文件夹,打开my.ini配

c++ - 将公共(public)接口(interface)与实现细节分开

我必须设计一个Font类,该类将具有跨平台或不同库(例如Win32GDI或FreeType)的多个实现。所以基本上会有单个共享头文件/接口(interface)文件和多个.cpp实现(在构建时选择)。我宁愿保持公共(public)接口(interface)(头文件)不受任何实现细节的影响,但这通常很难实现。字体对象必须拖动某种私有(private)状态-如GDI中的句柄,或内部的FreeType面部对象。在C++中,跟踪私有(private)实现细节的最佳方法是什么?我应该在实现文件中使用静态数据吗?编辑:发现这篇关于该主题的精彩文章:SeparatingInterfaceandImp

C++ 设计 : cast from base to derived class with no extra data members

我编写了很多处理消息协议(protocol)的代码。消息协议(protocol)通常会有一个通用的消息帧,可以从串行端口或套接字反序列化;该帧包含消息类型,消息负载必须根据消息类型进行处理。通常我会编写一组多态类,其中包含访问器方法和一个引用消息框架的构造函数。我突然想到,我可以直接从消息帧派生访问器类,然后从消息帧重新解释_cast到适当的访问器类,而不是根据对消息帧的引用构造访问器类。这使代码更加简洁并节省了一些字节和处理器周期。请参阅下面的(极其人为和浓缩的)示例。显然,对于生产代码,这一切都需要适当封装,转换成为派生类的成员,更好地分离关注点,并添加一些验证。为了把一个简明的例

C++ 保护 : fail to access base's protected member from within derived class

不可否认,这个问题的标题听起来与你的邻居迈克反复问的问题几乎一模一样。我发现很多问题的措辞相同,但没有一个是我的问题。首先,对于这个问题的上下文,我想澄清几点:1,c++访问控制是基于类而不是基于实例。因此,下面的代码是完全有效的。classBase{protected:intb_;public:boolIsEqual(constBase&another)const{returnanother.b_==b_;//accessanotherinstance'sprotectedmember}};2,我完全理解为什么以下代码无效-另一个可以是兄弟实例。classDerived:public

c++ - 带有 std::enable_if 和 std::is_default_constructible 的 SFINAE 用于 libc++ 中的不完整类型

我刚刚在使用SFINAE检测模板类型是否默认可构造时观察到libc++的一个奇怪问题。以下是我能够想出的一个最小示例:#include#includetemplatestructDummy;templatestructDummy{};templatestructhas_dummy:std::false_type{};templatestructhas_dummy>::value>>:std::true_type{};intmain(){std::cout{}(){}()它编译并输出预期的行true和false使用libstdc++使用g++或clang++编译时.但是,当我尝试使用li

c++ - 将 make_shared 与 protected 构造函数 + 抽象接口(interface)一起使用

给定一个抽象接口(interface)和一个从该接口(interface)派生的实现,其中构造函数受到保护(只能从类工厂创建这些对象-以实现DI模式),我如何在工厂函数中使用make_shared?例如:classIInterface{public:virtualvoidMethod()=0;};classInterfaceImpl:publicIInterface{public:virtualvoidMethod(){}protected:InterfaceImpl(){}};std::shared_ptrCreate(){std::shared_ptrobject=std::mak

c++ - 如何查找 ActiveX 控件的接口(interface)?

给定一个ActiveX控件的实例,我如何枚举它的接口(interface)?(我想获取接口(interface)的名称)。 最佳答案 就像其他人提到的那样,唯一的方法是对所有可能的接口(interface)进行QueryInterface。而这正是Microsoft工具OleView为您所做的。 关于c++-如何查找ActiveX控件的接口(interface)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

C++ 类设计为每个不同的行为提供多个接口(interface)

这是我的第一篇文章,所以请善待。这是我最近得到的一个面试问题,但我在搜索(google、C++FAQ等)后找不到答案。有一个行为b1()的接口(interface)I1。有3个类A,B,C。所有这些类都通过覆盖b1()来实现接口(interface)I1。有第四个类D,它具有在接口(interface)I1中定义的行为(b1)和一个额外的行为b2问题是你如何设计D类。我的答案是创建另一个接口(interface)I2,它定义行为b2()并通过覆盖b1()和b2()使类D实现I1和I2(C++中的多重继承)面试官同意这个解决方案,但问如果将来出现具有新行为的新类(class),我们将如何

C++ 函数回调 : Cannot convert from a member function to a function signature

我正在使用第3方库,它允许我为某些事件注册回调。注册函数看起来像这样。它使用回调签名。typedefint(*Callback)(std::string);voidregisterCallback(CallbackpCallback){//itgetsregistered}我的问题是我想像这样注册一个成员函数作为回调structMyStruct{MyStruct();intmyCallback(std::stringstr);};MyStruct::MyStruct(){registerCallback(&MyStruct::myCallback);}intMyStruct::myCa