草庐IT

Interface1

全部标签

c++ - 将从公共(public)接口(interface)派生的类的对象存储在公共(public)容器中的最安全方法是什么?

我想在公共(public)容器中管理从共享接口(interface)类派生的类的一堆对象。为了说明问题,假设我正在构建一个包含不同参与者的游戏。让我们调用接口(interface)IActor并从中派生Enemy和Civilian。现在,我的想法是让我的游戏主循环能够执行此操作://somewhereduringinitstd::vectorActorList;EnemyEvilGuy;CivilianCoolGuy;ActorList.push_back(EvilGuy);ActorList.push_back(CoolGuy);和//mainloopwhile(!done){BOO

c++ - 为什么 Boost.Asio 不支持基于事件的接口(interface)?

我试图理解Boost.Asio,目的是潜在地使用条件变量结合Boost.Asio来实现信号系统。我看过其他StackOverflow问题boostasioasynchronouslywaitingonaconditionvariable,boost::asioasynccondition,和boostconditionvariableissue,但这些问题/答案都没有令人满意地触及我的一个基本问题:Isittruethatand/oristhereafundamentalreasonwhy,Boost.Asioisnotapplicableto,oranaturalfitwith,条件

c++ - 实现接口(interface)类的纯虚方法的方法也应该声明为虚方法吗?

我阅读了关于这个问题的不同意见。假设我有一个带有一堆纯虚方法的接口(interface)类。我在实现接口(interface)的类中实现这些方法,我不希望从实现派生。是否需要将实现中的方法也声明为虚拟的?如果是,为什么? 最佳答案 否-在基类中声明为虚拟的每个函数方法在所有派生类中都将是虚拟的。但是良好的编码实践告诉我们将这些方法声明为虚拟的。 关于c++-实现接口(interface)类的纯虚方法的方法也应该声明为虚方法吗?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么无序容器不提供定义最小负载因子的接口(interface)?

我试图理解为什么哈希表(无序容器,如unordered_map或unordered_set)不提供用于查询或设置最小加载因子的接口(interface)。说c是unordered_set,我可以用c.max_load_factor()用于查询和c.max_load_factor(val)用于设置。为什么C++11不提供查询min_load_factor的接口(interface)?是否有实现细节,这将解释?另外,Josuttis的C++STL提到:最小加载因子,用于在容器内元素数量缩减不受影响时强制重新散列。 最佳答案 unorde

c++ - 可以在不重新编译客户端代码的情况下扩展虚拟接口(interface)吗?

库提供具有虚函数的类。是否可以在不重新编译动态链接到库的二进制文件的情况下使用新的虚函数扩展此类?我相信这在标准中是不可能的。是否有平台允许这样做?如果新函数只添加到类主体的末尾,会不会更容易? 最佳答案 该标准不关心二进制兼容性。它与类有关,并且通过将类的定义从一个翻译单元“更改”为另一个翻译单元,您确实会调用未定义的行为。大多数编译器确实允许在不需要重新编译的情况下进行一些更改,但是列表很小......对于这个我会说这可能是不可能的,取决于先验知识派生类。我预见的问题在于编译器通常对虚拟表进行的优化。当你创建一个带有虚函数的类时

c++ - 重载方法以实现接口(interface)的特殊情况

免责声明:我无法清楚地描述我正在尝试做什么,所以我希望这个例子比我的解释更清楚!请建议任何重新措辞以使其更清楚。:)是否可以使用比接口(interface)所需的版本更具体的版本来覆盖函数,以便与一般情况分开处理该接口(interface)中方法参数的子类?(下面的例子和更好的解释......)如果不能直接完成,是否有一些模式可以用来达到类似的效果?例子#includeclassBaseNode{};classDerivedNode:publicBaseNode{};classNodeProcessingInterface{public:virtualvoidprocessNode(B

abstract class 和 interface 有什么区别

目录abstractclass和interface有什么区别1.抽象类1.1抽象类的格式1.2抽象类注意事项2.接口2.1接口的格式2.2接口可以多继承2.3接口的实现(implements)3.异同abstractclass和interface有什么区别1.抽象类抽象类:声明方法的存在而不实现的类,如果一个类中没有包含足够的信息来描绘一个具体的对象,它只能被继承,派生出子类,这样的父类就是抽象类。1.1抽象类的格式[public]abstractclass类名[extends父类][implements接口列表]{//属性声明及初始化;//抽象方法的声明;//非抽象方法声明及方法体;}1.2

c++ - 通过 Gnuplot 的管道接口(interface)从 C/C++ 可视化

我正在尝试使用gnuplot的管道接口(interface)(一个标准的gnuplot_i.{cpp,hpp}),以便生成在另一个用C++编写的程序中不断变化的值的实时显示。这工作正常,但我想看看是否有人有任何改进建议。此实现包含一个方便的方法,可以将单个vector和2个vector绘制为二维图。它通过调用mktemp函数的标准库写入一个临时文件,然后将其用作gnuplotplot调用的输入来实现这一点。这会生成太多的临时文件,并且当图上的更新率很高时(也许IO在某一点上受到限制)似乎无法正常工作。我决定在绘图调用中使用“-”伪文件,并将vector直接发送到管道(以一行带有“e”的

c++ - 库应该使用使用智能指针的接口(interface)吗?

我开始编写一个库并考虑它的接口(interface)。以前我写的库都使用原始指针(内部和接口(interface)),现在我想试试VS2010自带的智能指针库。接口(interface)应该使用智能指针吗?(可能会迫使图书馆用户也使用智能指针?)如果接口(interface)使用原始指针而库在内部使用智能指针,会不会很困惑?(甚至可能吗?shared_ptr没有release()方法...)两个兼容c++0x的智能指针库(比如boost和VS2010)可以互换使用吗?(假设我使用VS2010编写我的库,用户使用boost)请帮忙:) 最佳答案

c++ - 抽象类作为接口(interface),没有 vtable

我想创建一个抽象类来定义类的一些方法。其中一些应该由基类(Base)实现,一些应该在Base中定义但被Derived覆盖,还有一些应该在Base中是纯虚拟的以强制在Derived中定义。这当然是抽象类的用途。但是,我的应用程序只会直接使用Derived对象。因此,编译器应该在编译时准确地知道要使用哪些方法。现在,因为这段代码将在RAM非常有限的微Controller上运行,所以我很想避免实际使用带有vtable的虚拟类。从我的测试来看,编译器似乎足够聪明,除非必须,否则至少在某些情况下不会创建vtable。然而,有人告诉我永远不要相信编译器:是否有可能将其作为编译的必要条件?下面是一些