草庐IT

c++ - 内部类的模板特化

考虑以下代码:structX{templateclassY{};};templateclassX::Y{};这里我们专门针对double类型的Y类,代码运行良好。问题是,如果我将代码更改为:templatestructX{templateclassY{};};templateclassX::Y{};编译器会报错:'X::Y':explicitspecializationisusingpartialspecializationsyntax,usetemplateinstead!有人知道在这种情况下我如何专攻Y类吗? 最佳答案 如果不显

C++ 外部类定义

我正在阅读一些代码:externclassMyClass:BaseClass{...}MyInstance;extern是指类声明还是实例? 最佳答案 实例。类不能是外部的。尽管代码有异味-这段代码表明该实例的真实声明使用了单独的类定义。坏主意-两次定义类。 关于C++外部类定义,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2023952/

c++ - 初始化模板内部类的静态成员

我对在类模板中初始化静态成员所需的语法有疑问。这是代码(我尽量减少它):templatestructA{templatestructB{staticT1b;};Bb;typedefBBT;Tval(){returnb.b;}};templateTA::BT::b;structD{D():d(0){}intd;};intmain(){Aa;returna.val().d;}使用g++,我得到的错误是:error:toofewtemplate-parameter-lists关于如何初始化b有什么想法吗?请注意,我想保留typedef,因为在我的真实代码中,B比这复杂得多。

c++ - 函数接受模板类的内部类的问题

我对类模板中的内部类有疑问。我有一个模板类(例如:Matrix)和一个子类(例如:Matrix::Row)。现在我想写一个函数来操作子类的实例(比如:negate(Matrix::Row&))。我试图用templatenegate(typenameMatrix::Row&)声明函数,但是当我尝试使用它时,编译器告诉我找不到匹配项。这是一个抽象的例子:templateclassA{public:classB{};};templatevoidx(typenameA::B&){}intmain(){A::Bb;x(b);//doesn'twork:Error:Couldnotfindamat

c++ - 使用命名空间隐藏内部类实现

我正在开发一个库,我想为我的用户提供一个与隐藏在命名空间中的实际实现分开的公共(public)接口(interface)。这样,我可以只更改HiddenQueue类,而不更改仅向用户公开的myQueue。如果我将HiddenQueue的C++代码放在myQueue.cpp文件中,编译器会提示说_innerQueue的类型不完整。我认为链接器能够解决这个问题。我在这里做错了什么?//myQueue.hnamespaceinner{classHiddenQueue;};classmyQueue{public:myQueue(););private:inner::HiddenQueue_in

c++ - 私有(private)内部类的友元函数

我有以下问题。我有一个带有私有(private)内部类的类。我现在想为内部类实现一个friend交换功能。但是我不知道如何制作非内联交换功能。如果我在内部类中定义它,一切正常。如果有人可以告诉我如何使其成为非内联的,我将不胜感激:)一些代码确实说明了问题:classOuter{classInner{intdata;friendswap(Inner&lhs,Inner&rhs)//whatisthesyntaxto{//makethisfunctionnoninline?usingstd::swap;swap(lhs.data,rhs.data);}}} 最佳

c++ - 将 vector 成员变量返回给外部类的最佳方法

我正在尝试用C++编写LED灯条驱动程序。现在我有一个Strip类和一个Driver类(class);Strip类抽象出具有多个像素的LED灯条,而Driver类聚合了Strip数据放入单个缓冲区以通过UDP连接发送。相关部分类:classStrip{public:...???getPixelData();intgetPixelDataLength();protected:std::vectormPixelData;classDriver{public:...voidaggregateStrips();protected:vectormBuffer;serialize将所有红-绿-蓝像

调用模板化内部类静态成员函数的 C++ 语法?

我有一些模板代码可以在VC9(MicrosoftVisualC++2008)中正常编译,但不能在GCC4.2(在Mac上)中编译。我想知道我是否缺少一些语法魔法。下面我有一个精简的例子来证明我的错误。抱歉,如果这个示例看起来毫无意义,我已尽可能删除以隔离此错误。特别是我有一个模板类S,它有一个内部类R,它也是一个模板类。从顶级模板函数foo,我试图调用R::append,它是R的静态成员函数:templatestructS{templateS&append(constT&){return*this;}templatestructR{templatestaticS&append(S&s,

c++ - 未定义对外部类的引用?

在类上使用extern时,它会给我undefinedreference,但是当我创建从该类“静态”调用的函数时,它工作正常。有没有办法不使用静态成员函数就可以做到这一点?我的测试代码:#includeclassMyClass{public:voidprint(){std::clogprint();return0;}错误:main.o:main.cpp:(.text+0x129):undefinedreferenceto`_g_myClass'在实际代码中我遇到了段错误。回溯:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00465af

c++ - c++ 局部类中的静态成员变量?

我知道我们不能在本地类中声明一个static成员变量...但原因尚不清楚。请问有人能解释一下吗?另外,为什么我们不能直接在本地类成员函数中访问函数内部定义的非static变量,其中已经定义了本地类?在下面给出的代码中:intmain(intargc,char*argv[]){staticsize_tstaticValue=0;classLocal{intd_argc;//non-staticdatamembersOKpublic:enum//enumsOK{value=5};Local(intargc)//constructorsandmemberfunctionsOK://in-cl