草庐IT

final-class

全部标签

c++ - "enum class"MSVC 10.0 的仿真或可靠替代方案

我正在为以下问题寻找一种hacky的解决方案:GCC4.4+接受以下c++0x代码:enumclassmy_enum{value1,value2};允许这样使用:my_enume=my_enum::value1;这带来了所有的花里胡哨。我想让这段代码与MSVC2010兼容,大意是使用语法不会改变。我之前已经思考过here,并且接受的答案有效,但是需要枚举和枚举值的两个不同名称正在破坏这两种方法的兼容性。这使得按原样替换C++0x代码当然无法使用。我想知道是否有一些#undef和#define诡计可以解决这个问题,让我使用enumclass-像语法(可能没有严格的类型安全等),但至少是相

c++ - std::is_class 的这种实现是如何工作的?

我正在尝试了解std::is_class的实现。我复制了一些可能的实现并编译了它们,希望弄清楚它们是如何工作的。完成后,我发现所有的计算都是在编译过程中完成的(我应该早点发现,回头看),所以gdb不能给我更多关于到底发生了什么的细节。我很难理解的实现是这个:templatestructintegral_constant{staticconstexprTvalue=v;typedefTvalue_type;typedefintegral_constanttype;constexproperatorvalue_type()constnoexcept{returnvalue;}};names

c++ - std::is_class 的这种实现是如何工作的?

我正在尝试了解std::is_class的实现。我复制了一些可能的实现并编译了它们,希望弄清楚它们是如何工作的。完成后,我发现所有的计算都是在编译过程中完成的(我应该早点发现,回头看),所以gdb不能给我更多关于到底发生了什么的细节。我很难理解的实现是这个:templatestructintegral_constant{staticconstexprTvalue=v;typedefTvalue_type;typedefintegral_constanttype;constexproperatorvalue_type()constnoexcept{returnvalue;}};names

c++ - GCC/VS2008 : Different behaviour of function call when templated base class is derived from itself

以下代码适用于VisualStudio2008,但不适用于GCC/G++4.3.420090804。根据C++标准,哪种行为正确?templatestructA:A{};templatestructA{};structB:A{};templatevoidFunc(constA&a){}intmain(){Aa;//isderivedfromAFunc(a);//vs2008:ok,g++:ok//Comeau:okBb;//isderivedfromAFunc(b);//vs2008:ok,g++:error,nomatchingfunctionforcalltoFunc(B&)//C

c++ - GCC/VS2008 : Different behaviour of function call when templated base class is derived from itself

以下代码适用于VisualStudio2008,但不适用于GCC/G++4.3.420090804。根据C++标准,哪种行为正确?templatestructA:A{};templatestructA{};structB:A{};templatevoidFunc(constA&a){}intmain(){Aa;//isderivedfromAFunc(a);//vs2008:ok,g++:ok//Comeau:okBb;//isderivedfromAFunc(b);//vs2008:ok,g++:error,nomatchingfunctionforcalltoFunc(B&)//C

C++ 和 STL 进修类(class)

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,describetheproblem以及到目前为止为解决这个问题所做的工作。关闭8年前。Improvethisquestion我非常了解C和C++。我对指针有很多详细的了解,并且精通指针算法,并且在我的大学时代也曾研究过Win32API和一点MFC。在我以前的工作中,我没有机会看到这些事情,而是在其他领域工作。现在我想要的是一个速成或进修类(class):

C++ 和 STL 进修类(class)

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,describetheproblem以及到目前为止为解决这个问题所做的工作。关闭8年前。Improvethisquestion我非常了解C和C++。我对指针有很多详细的了解,并且精通指针算法,并且在我的大学时代也曾研究过Win32API和一点MFC。在我以前的工作中,我没有机会看到这些事情,而是在其他领域工作。现在我想要的是一个速成或进修类(class):

c++ - 当作为参数传递时,为什么不能在子类函数中访问 protected 父类(super class)成员?

我收到一个编译错误,对此我有些困惑。这是在VS2003上。错误C2248:“A::y”:无法访问在“A”类中声明的protected成员classA{public:A():x(0),y(0){}protected:intx;inty;};classB:publicA{public:B():A(),z(0){}B(constA&item):A(),z(1){x=item.y;}private:intz;};问题在于x=item.y;访问被指定为protected。为什么B类的构造函数不能访问A::y? 最佳答案 因为这个:classb

c++ - 当作为参数传递时,为什么不能在子类函数中访问 protected 父类(super class)成员?

我收到一个编译错误,对此我有些困惑。这是在VS2003上。错误C2248:“A::y”:无法访问在“A”类中声明的protected成员classA{public:A():x(0),y(0){}protected:intx;inty;};classB:publicA{public:B():A(),z(0){}B(constA&item):A(),z(1){x=item.y;}private:intz;};问题在于x=item.y;访问被指定为protected。为什么B类的构造函数不能访问A::y? 最佳答案 因为这个:classb

c++ - C++11 标准容器是 "final"吗?

我们(应该)知道C++标准库容器,包括std::string,并不意味着继承自。但是,C++98/03确实允许我们这样做,即使它会导致错误。既然final关键字可用,那些标准库容器是否标记为final以防止对它们的不良使用继承?如果不是,那是为什么? 最佳答案 LWG在最近于2012年2月6日至10日在科纳举行的session上讨论了这个问题。我是LWGissue2113.LWG决定将LWG2113标记为NAD(不是缺陷),理由是标准已经明确现有类(如容器和std::string不能标记为final)通过实现。讨论包括这样一个事实,