草庐IT

GET_MEMFUN_CLASS

全部标签

c++ - 这是对类(Class)友情的恰当运用吗?

在创建Windows父类和子类对话框时,让子类成为父类的友元以访问其私有(private)数据通常是个好主意还是应该使用访问函数? 最佳答案 很少需要friend-通常是当您需要在一个类中重新实现一些深层行为而不重写它以便它们都从单个基类继承或不提供大量访问者时。只有一次我需要它是在ActiveX中重写一个基于openGL的渲染器——当我需要获取大量低级模型数据,但不能(出于非技术原因)重新实现一个通用的ABC时。 关于c++-这是对类(Class)友情的恰当运用吗?,我们在StackO

c++ - 将子类传递给采用其父类(super class)的函数

假设我有三个类-Animal、Cat和Dog,其中Cat和Dog是Animal的子类(这听起来确实像第一个类,但我保证这不是作业,只是简化了真正的代码)Dog*spike=newDog();Cat*puss=newCat();intmain(intargc,char**argv){function(spike,puss);return0;}voidfunction(Animal*pet,Animal*pet2){magic->andSoForth();}现在这会产生以下错误:Cannotconvertparameter1from'Dog*'to'Animal'Noconstructor

c++ - 实现Matlab的冒号: operator in C++ expression templates class

我正在实现一个C++表达式模板库。我已经设置了一个适当的SubMatrixExpr类来收集矩阵中的元素,启用类似的语法B=SubMatrix(A,1,3,2,10);相当于Matlab的B=A(1:3,2:10);当然,Matlab的语法比我的要舒服得多。所以我的问题是有没有可能在C++中设置Matlab的冒号:运算符?非常感谢您。 最佳答案 简短的回答:没有。冒号不是有效的C++运算符,因此不能重载。即使可以,它仍然不可能轻松实现您的需求,因为它肯定会优先于逗号运算符,这将使您的表达式位于A((1:3),(2:10))行中。,如果

C++ 仿函数和模板 : error: declaration of 'class List<T>'

我在模板类中有一个嵌套模板,用于名为List::find()的方法。此方法获取一个仿函数作为输入,即:“函数条件”。templateclassList{....templateIteratorfind(Functioncondition)const;....};templatetypenameList::IteratorList::find(Functioncondition)const{List::Iteratorit=this->begin();for(;it!=this->end();++it){if(condition(*it)){break;}}returnit;}错误是:.

c++ - 专门为私有(private)类(class)的功能?

有没有办法为私有(private)类专门化一个函数(比如,std::swap)?例如,当我测试这个时:#includeclassOuter{structInner{inta;voidswap(Inner&other){usingstd::swap;swap(this->a,other.a);}};public:staticvoidtest();};namespacestd{templatevoidswap(Outer::Inner&a,Outer::Inner&b){a.swap(b);}}voidOuter::test(){usingstd::swap;Innera,b;swap(a

c++ - 错误 "undefined reference to omp_get_wtime"

我找不到要在Windows下的GCC(4.8)中链接的库(Vista)。我尝试了-fopenmp-llibgomp-lgomp编译器指令,但没有任何效果。我已经有了带POSIX的GCC(所以如果启用C++11,std::thread可以正常工作)。问题似乎是搜索正确的库并没有提供有用的结果(甚至在GCC/MinGW文档中搜索)。所以基本上我无法得到thisanswer工作(答案声称适用于大多数编译器,但它没有提供有关如何使其工作的额外信息,因此我无法验证它是否真的工作)。最好现在提供额外的信息以使其在大多数系统上运行...... 最佳答案

c++ - 嵌套类声明 : template vs non-template outer class

我有一个C++模板类,里面有一个嵌套类,比如:templateclassOuter_t{public:classInner;Inneri;};templateclassOuter_t::Inner{public:floatx;};intmain(){Outer_to_t;//3oranyarbitraryinto_t.i.x=1.0;return0;}编译没有任何问题。然而,一旦我声明了一个类似的非模板类,就像这样:classOuter_1{public:classInner;Inneri;};classOuter_1::Inner{public:floatx;};intmain(){

c++ - 为枚举索引数组重载 std::get

我发现拥有一个基本上像std::array但由一些枚举的值索引的类相当方便。我想不难想象如何实现它,假设它有一个像这样的签名:classenum_array另一方面,在尝试实现所有标准的std::array相关函数时,我注意到为此类编写重载的std::get函数模板没那么简单。首先,我认为这个std::get具有上述枚举的值作为模板参数是很自然的,因此出现了大多数问题:1)如果我想在类外定义这样的函数,我必须做类似的事情:namespacestd{templateEnumT&get(enum_array&val)但问题是在指定第一个模板参数时EnumT仍然是未知的,所以这个模板实际上是

c++ - 在 C++ 中定义虚拟 get 和 set 函数被认为是一种好的做法吗?

如果我有一个简单的2级类层次结构,例如这个://level1classSpare_Part{private:stringname;doubleprice;public:Spare_Part();stringgetName(){returnname;}doublegetPrice(){returnprice;}virtualintgetQuantity(){return-1;};//mayalsodefineitaspurevirtual};//level2classOn_hand:publicSpare_Part{private:intquantity;stringlocation;p

c++ - 将临时变量写入 Json : I get\u0000

我面临一个奇怪的问题:当我尝试在for循环中添加一个Json变量时,它没有正确写入输出文件,而它在循环外运行良好(rapidJsonv0.11)。编辑:循环不是问题,但即使只有括号也会出现错误这是我的代码示例:rapidjson::Documentoutput;output.SetObject();rapidjson::Document::AllocatorType&allocator=output.GetAllocator();{std::strings1("test");output.AddMember("test_field",s1.c_str(),allocator);}std