草庐IT

c++ - 模板类的模板友元函数

我一直在努力解决thisquestion中描述的问题(将模板函数声明为模板类的friend),我相信第二个答案是我想要做的(转发声明模板函数,然后将特化命名为friend)。我有一个问题,即稍微不同的解决方案实际上是正确的还是恰好适用于VisualC++2008。测试代码为:#include//forwarddeclarationstemplateclasstest;templatestd::ostream&operator&t);templateclasstest{friendstd::ostream&operator(std::ostream&out,consttest&t);//

c++ - C++ 类的大小

这是打印不同类别大小的代码#includeusingnamespacestd;classEmptyClass{};classAbstractClass{public:virtualvoidfuncOne()=0;virtualvoidfuncTwo()=0;};classNotAbstrClass{public:intvirtFunc(int);};classMixClass{public:virtualvoidclFunc(int);staticinti;intj;};intmain(){//Printsizeofclassorclassobjectscout程序在C++11编译器上

c++ - 具有继承的嵌套类的名称查找

这是否保证有效:structA{structGold{};};structB:publicA{typedefGoldBaseGold;structGold{};};structC:publicB{typedefGoldBaseGold;structGold{};};static_assert(is_same::value,"Nottherighttreasure!");static_assert(is_same::value,"Nottherighttreasure!");它似乎适用于VS2010。显然它依赖于微妙的声明顺序/名称查找规则,所以我想知道标准对此事的看法......

c++ - 指向结构/类的递归成员的可变指针序列作为模板参数

我正在为一些模板编程而苦苦挣扎,我希望你能给我一些帮助。我编写了一个C++11接口(interface),给定了一些结构,例如:structInner{doublea;};structOuter{doublex,y,z,r;Innerin;};对为指定结构成员定制的真实数据实现getter/setter:MyDatastate();Outerfoo=state.get();//...state.set(foo);我设法通过以下方式为简单结构实现了这一点:templateclassMyData{std::vectorvar;public:explicitMyData();voidset(

c++ - 访问派生类中类的 protected 成员

我这里有一个旧代码库,他们在其中使用了protected成员变量。可以讨论这是否是一个好主意。但是,代码必须使用gcc3编译得很好。我有一个派生模板类Bar,它像这样使用类模板Foo中的protected成员xtemplateclassFoo{public://stuff...protected:some::typex;}templateBar:Foo{public:voidcleanup();}在cleanup()的方法声明中有一些用x完成的事情templatevoidBar::cleanup(){doSomeThingCleanUpLike(x);}这不适用于gcc4,尽管它应该适

c++ - 如何使 lambda 成为类的友元?

比方说,我有一个类:classA{inta;};我有一个lambda:autofunction=[](A*a){a->a;//有没有办法在lambda中使用私有(private)成员/方法?-没有必要将指针传递给lambda-它可能是捕获或其他东西。欢迎所有合理的方案。 最佳答案 您可以通过创建返回lambda函数的友元函数来实现。它继承了好友访问权限:structA{friendstd::functionf();private:inti;voidtest(){std::coutf(){return[](A&a,inti){a.i=

c++ - constexpr 类的设计 : merging constexpr and non-constexpr versions?

考虑一个在运行时只包装一个值的类:templateclassNonConstValue{public:NonConstValue(constType&val):_value(val){;}Typeget()const{return_value;}voidset(constType&val)const{_value=val;}protected:Type_value;};以及它的constexpr版本:templateclassConstValue{public:constexprConstValue(constType&val):_value(val){;}constexprTypeg

c++ - C++ 类的全局实例

正如标题所说。我将如何创建一个全局可用的类的实例(例如,我有一个用于打印的仿函数,我想拥有它的一个全局实例(尽管有可能创建更多实例))。 最佳答案 竭尽全力使用通常的模式制作单例对象并不能解决问题的第二部分-如果需要,可以制作更多。单例“模式”非常严格,只不过是另一个名称的全局变量。//myclass.hclassMyClass{public:MyClass();voidfoo();//...};externMyClassg_MyClassInstance;//myclass.cppMyClassg_MyClassInstance;

c++ - 一个类的方法中的本地类是这个类的 friend 吗?

我有一个外部类A。它有一个方法A::fun。在这个方法中,它有一个本地或内部类B。我的问题是:B是A的friend吗?我认为不是。这样对吗?如果是这样,我认为让B类成为A的friend是非常有益的,因为B可以访问A's私有(private)和protected成员。而且,由于B在方法中是本地的,其他人无法访问它,因此作为A的友元是安全的。如何让B访问A的私有(private)和protected成员? 最佳答案 不,他们不是friend。但是局部类对函数外部的名称具有与函数本身相同的访问权限。标准说:9.8Localclassdec

c++ - 从子类的构造函数体调用基类的构造函数

我的印象是这是不可能的,例如:CallingtheconstructorofthebaseclassaftersomeotherinstructionsinC++但是下面的程序运行并产生了两行“ConstructorPerson”:#includeclassPerson{public:Person(){std::cout第一个是默认构造函数的隐式调用,很清楚。第二个怎么样-这是否意味着标题中描述的行为是合法的?我使用VisualC++2010。 最佳答案 子类构造函数内部的调用不是调用基类构造函数,它是创建一个临时的、未命名的、类型