草庐IT

default-interface-member

全部标签

c++ - 就 c++ 接口(interface)而言,什么是(简单理解)窄契约(Contract)和宽契约(Contract)?

在浏览一些c++11概念时,我遇到了术语narrowcontract和widecontract。但我没能找出为这些合约编写的简单函数示例。我可以看一个简单的函数示例来区分这两个合约吗? 最佳答案 宽合约函数对所有可能的输入都有明确定义的行为,而窄合约意味着函数只能在满足特定先决条件时调用。“输入”还可能包括全局状态或为其调用成员函数的对象。明确定义的行为可能意味着抛出异常。例如,std::vector-s.size()成员函数具有广泛的契约,因为它可以在vector的任何实例上调用(如std::vectorv;/*anythingc

c++ - cstdint : No member named xxx in global namespace 中的错误

什么会导致这些错误?我在Xcode中添加了一个空项目,在HeaderSearchPaths中添加了/usr/local/lib,并添加了一些opencv库。建筑给出了这些错误:更新我的系统上确实安装了stdint.h。我在OS10.9上运行,所以像int_least16_t这样xcode在全局命名空间中找不到的类型似乎已定义。typedefint16_tint_least16_t;。find/Applications/Xcode.app-namestdint.h/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.p

c++ - 在C++11或更高版本中,有没有办法通过lambda实现单方法纯虚C++接口(interface)?

我有一个用C++98编写的大型C++库,它大量使用C++接口(interface)(准确地说,只有纯虚函数的C++类)来处理事件。现在看到我的代码是由C++11/14编译器编译的,我在想是否可以通过使用C++11lambda替换接口(interface)实现来减少样板代码。在我的库中,有一些C++接口(interface)只有一个方法,例如,我们用来定义一个简单任务的以下接口(interface):classSimpleTask{public:virtualvoidrun()=NULL;};我的意图是使用C++lambda来替换旧的单一方法接口(interface)实现代码,如下所示:

c++ - 带接口(interface)的动态转换

我有一个类实现了2个接口(interface)并继承了1个类。所以,通常它看起来像这样:classT:publicA,publicIB,publicIC{};代码中有一处我有IB*,但实际上可以使用A*。我希望动态Actor会喜欢这样:IB*b_ptr=newT;//it'sreallymorecomplicated,butservestheexampleA*a_ptr=dynamic_cast(b_ptr);不幸的是,这不起作用。有没有正确的方法来做到这一点?还是我应该实现变通办法?我考虑过让IB和IC都从A虚拟继承,但是IIRC上次我尝试了一些复杂的事情不受欢迎。有什么想法吗?编辑

C++ - 派生类中的 "Member function not declared"

我在MSVC++2008中遇到问题,其中VS2008抛出此编译错误:errorC2509:'render':memberfunctionnotdeclaredin'PlayerSpriteKasua'现在,令我困惑的是render()已定义,但在继承的类中。类定义是这样的:SpriteBase-InheritedBy->PlayerSpriteBase-InheritedBy->PlayerSpriteKasua因此,SpriteBase.h的简化版本如下:classSpriteBase{public://Variables===============================

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++ - 使用 C++ 写入二进制文件 : does the default locale matter?

我的代码使用设置了二进制标志的fstream和使用未格式化的I/O函数读取和写入来操作二进制文件。这在我曾经使用过的所有系统上都能正常工作(文件中的位完全符合预期),但这些基本上都是美国英语。我一直想知道这些字节是否可能被不同系统上的codecvt修改。听起来标准说使用未格式化的I/O与使用sputc/sgetc将字符放入streambuf的行为相同。这些将导致调用streambuf中的溢出或下溢函数,并且听起来这些会导致通过某些codecvt的东西(例如,请参阅c++标准中的27.8.1.4.3)。对于basic_filebuf,此codecvt的创建在27.8.1.1.5中指定。这