草庐IT

base_classes

全部标签

c++ - C++ 中 (base->*&Func)() 的含义是什么

下面是简单的类定义classBase{public:virtualvoidFunc(){cout和声明(b->*&Base::Func)();调用Func的派生版本,与b->Base::Func()不同,它按预期调用基础版本,为什么会发生这种情况,调用的确切含义是什么? 最佳答案 调用的意思是增加冗长。基本上:表达式&Base::Func是指向成员函数的指针,并且(b->*x)()是调用成员函数的语法x指向b指向的对象。在这个情况下,因为x是一个常量,所以它与写作大致相同*&变量。与b->Func()含义相同。至于为什么它的行为不同

c++ - 不完整类型 struct std::hash 与 unordered_map 的无效使用,其中 std::pair of enum class 作为键

我想使用unordered_map,std::uint8_t>用于管理一些像素图格式。这里是最少的代码:#include#include#include#include#includeenumclassPNM:std::uint8_t{PBM,PGM,PPM};enumclassFormat:bool{BIN,ASCII};structpair_hash{public:templatestd::size_toperator()(conststd::pair&x)const{returnstd::hash()(x.first)^std::hash()(x.second);}};intma

c++ - 将 128 位十六进制字符串转换为 base-36 字符串

我有一个128位的十六进制数字存储在一个字符串中(来自md5,这里安全性不是问题)我想将其转换为base-36字符串。如果它是64位或更少的数字,我会将其转换为64位整数,然后使用我发现的算法将整数转换为base-36字符串,但这个数字太大了,所以我有点不知道如何处理这个问题。任何指导将不胜感激。编辑:在RolandIllig指出在电话中说0/O和1/l的麻烦并且没有通过十六进制获得太多数据密度之后,我想我可能最终会继续使用十六进制。我仍然很好奇是否有一种相对简单的方法可以将任意长度的十六进制字符串转换为base-36字符串。 最佳答案

c++ - 翻译单位可以私有(private)类(class)吗?

考虑以下代码:/**myclass.h*/classmyclass_impl{//...}boost::shared_ptrmyclass;我能否以某种方式使myclass_impl(或至少直接使用它)对定义它的翻译单元私有(private),从而允许客户仅使用myclass类型定义?我想要实现的是让编译器在有人直接使用实现类时提醒我。 最佳答案 在源文件(不是头文件)中声明您的类,其他翻译单元将无法访问它。然后,使用前向声明在头文件中声明指针/引用。或者定义一个impl头文件,并注释掉它不应该包含在其他源文件中。/**myclas

c++ - 警告 C4251 : needs to have dll-interface to be used by clients of class

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:std::vectorneedstohavedll-interfacetobeusedbyclientsofclass'Xwarning这是我在该组中的第一篇文章。我正在创建一个DLL并在应用程序的主文件中调用它。代码编译正常,但出现以下错误:warningC4251:'PNCBaseClass::m_vAvailChannelsFromRx':class'std::vector'needstohavedll-interfacetobeusedbyclientsofclass'PNCBaseClass'3>w

C++ 'class' 类型重定义

我第一次尝试使用C++中的类。我的circle类和关联的头文件工作正常,然后我移动了一些文件,从那以后一直收到错误,我在下面显示了错误。c:\circleobje.cpp(3):errorC2011:'CircleObje':'class'typeredefinitionc:\circleobje.h(4):seedeclarationof'CircleObje'CircleObje.h#ifndefCircleObje_H#defineCircleObje_HclassCircleObje{public:voidsetCol(floatr,floatg,floatb);voidset

解码base64来自r legiscan api的文本

我正在尝试分析Legisscan的帐单文本,但是正在遇到问题,从API拉响应中解码文本的问题。事实证明,Legisscan在第64号基准中编码所有立法的全文,当时我在解码它时遇到了一些麻烦。这个下载的JSON请求是我通过API下载的JSON结果的全文部分的一个示例。但是,通常的方法似乎并不是在努力。我尝试了什么:Legiscan似乎并不直接支持R,因此我使用了Legiscanr包。我使用LegisCanr的BillText函数获取正确的JSON链接,然后使用ParseBillText尝试将链接中的文本解码为UTF-8。但是,即使使用正确的API键和链接中说明的文档ID,它也会引发fromjso

c++ - OpenCV cv::Mat 到 std::ifstream 进行 base64 编码

老实说,我很惊讶到目前为止还没有人遇到过这个问题。我正在将一张图片从OpenCV加载到cv::Mat,我想在通过套接字发送它之前对其进行base64编码。对于base64,我使用libb64因为它是Debian/Ubuntu原生的,易于使用且速度非常快。编码函数将std::ifstream作为参数,并输出std::ofstream。#include#include#includeusingnamespacecv;Matimage;image=imread("picture.jpg",CV_LOAD_IMAGE_COLOR);if(image.data){std::ifstreamins

c++ - template<class key, class type> 在 C++ 中的方法之前是什么意思?

我有这段代码,我试图理解遵循的约定,.cpp文件中定义的所有方法都有template写在他们面前。这是什么意思?例子://ConstructortemplateMyOperation::MyOperation(){//methodimplementation}//AmethodtemplateMyOperation::otherOperation(){//methodimplementation}谢谢 最佳答案 必须已经有一个很好的答案,但我也会把我的也扔进池中。C++允许程序结构的声明和实现分开进行。它源于C/C++程序员如何相互

c++ - 从子类到父类(super class)再到子类的转换?

我的程序需要处理不同种类的“笔记”:NoteShort,NoteLong...不同种类的笔记应该以不同的方式显示在GUI中。我为这些笔记定义了一个基类,叫做NoteBase.我将这些笔记存储在XML中;我有一个从XML文件读取并将笔记数据存储在vectorlist中的类.然后我发现我无法获取它们自己的类型,因为它们已经转换为NoteBase*!虽然if(dynamic_cast(ptr)!=NULL){...}可能有效,它真的太丑了。实现函数取NoteShort*或NoteLong*作为参数不起作用。那么,有什么好的方法可以解决这个问题吗?更新:谢谢大家的回复。我认为这也不应该发生——