草庐IT

c++ - 通过引用传递带有枚举类的枚举

我有thefollowingcode我认为应该编译但没有编译。#includetypedefuint8_ttesttype;enumtestenum:uint8_t{};voidfoo(uint8_t&v){}intmain(){testtypebar;foo(bar);testenumbaz;foo(baz);return0;}我收到以下错误:prog.cpp:15:9:error:invalidinitializationofnon-constreferenceoftype'uint8_t&{akaunsignedchar&}'fromanrvalueoftype'uint8_t{

c++ - 通过存储在字符串中的名称创建类的对象?

我可以在运行时通过提取存储在字符串中的类名来创建类的对象吗?例如:我想创建类QButton的对象QStringstrClassName="QButton";QButton*pBtn=newstrClassName();我想读取所有控件的xml文件并使用这种方式在运行时实例化它们。 最佳答案 也许您正在寻找QUiLoader提供的功能? 关于c++-通过存储在字符串中的名称创建类的对象?,我们在StackOverflow上找到一个类似的问题: https://s

c++ - 如何分 ionic 模板类的定义和声明

如果我有一个模板类定义为:#ifndefA_HPP#defineA_HPPtemplateclassA{public:intdoSomething(intin,booluseFirst);private:templateclassB{public:intdoSomething(intin);};Bfirst;Bsecond;};#include"a_imp.hpp"#endif现在我可以像这样在实现头文件中为A::doSomething声明#ifndefA_IMP_HPP#defineA_IMP_HPPtemplateintA::doSomething(intin,booluseFir

c++ - 使用 `extern template` 防止模板类的隐式实例化

考虑以下代码片段:templatestructX{};externtemplatestructX;intmain(){X{};}它编译并链接:liveexampleongodbolt.org.由于externtemplate声明,我希望它不会链接。我的理解是externtemplate的意思是:“请不要在这个TU中实例化这个特定的模板特化,它将由其他一些TU提供,你可以链接到它”.示例/描述。我在isocpp上看到过,cppreference似乎验证了我的心智模型。例如Fromhttps://en.cppreference.com/w/cpp/language/class_templa

c++ - 是否调用引发异常的 C++ 类的析构函数?

假设我有这样一个类:#includeusingnamespacestd;classBoda{private:char*ptr;public:Boda(){ptr=newchar[20];}~Boda(){cout似乎永远不会调用析构函数~Boda,因此永远不会释放ptr资源。这是程序的输出:terminatecalledafterthrowinganinstanceof'int'Aborted看来我的问题的答案是No。但我认为当抛出异常时堆栈会被展开?为什么在我的示例中Bodab对象没有被破坏?请帮助我理解这个资源问题。我想在未来编写更好的程序。另外,这就是所谓的RAII吗?谢谢,Bo

c++ - 如何将模板类的静态成员专门化为模板类型?

假设我有以下类(class):templatestructA{staticintvalue;};templateintA::value=0;我可以毫无问题地将A::value专门化为具体类型:structB{};templateintA::value=1;我想在模板类型上专门化A::value,我尝试了以下操作:templatestructC{};//error:templatedefinitionofnon-template'intA>::value'templatetemplateintA>::value=2;有什么办法可以做到这一点,还是只能在非模板类型上专门化A::value?

c++ - 我如何允许移动构造并禁止类的赋值和复制构造

有没有办法允许移动构造函数并禁止复制构造和赋值。我可以想到几个具有文件指针和缓冲区指针(资源句柄等)的类,它们将受益于复制构造和分配。我正在使用VC2010和GCC4.5.2。我知道我必须在VC2010类header中声明空的私有(private)赋值和复制构造函数,据我所知,GCC允许在方法之后执行某种删除签名来执行相同的操作。如果有人有像这样的骨架类的好例子及其优点,我将不胜感激。提前致谢约翰这里是一个类的例子,我想允许移动但我也想阻止直接分配。复制构造函数和operator=private是不是同样的问题?classLoadLumScanner_v8002:publicILoad

c++ - 定义一个类的私有(private)整型常量 : in the header or in the cpp file?

主题主要在此处解决(Wheretodeclare/defineclassscopeconstantsinC++?)特别是here.我想完全理解的是,在积分常数的情况下,它们之间有什么区别://IntheheaderclassA{private:staticconstintmember=0;//Declarationanddefinition};和://IntheheaderclassA{private:staticconstintmember;//Onlydeclaration};//InthecppconstintA::member=0;//Definition(据我所知,第二种可能

c++ - 带有返回 const 引用的隐式转换运算符的类的 static_cast<> 行为

我有以下类(class)(精简后只包含相关部分):#includeclassText{private:std::string_text;public:Text(std::string&&text):_text(std::move(text)){}operatorconststd::string&()const{return_text;}};我的问题是:如果我想获得一个conststd::string&,我可以这样做而不会受到任何惩罚吗:Texttext("fred");auto&s=static_cast(text);或者这会构造一个我最终得到引用的中间std::string吗?这种情

c++ - 多重继承类的复制构造函数

考虑这段代码:#include#includeusingnamespacestd;classBase{char_type;public:Base(chartype):_type(type){}~Base(){coutv;Baseb('b');Childc;v.push_back(b);v.push_back(c);return0;}我系统的输出是:Basedestructor:bChilddestructorBasedestructor:cBasedestructor:bBasedestructor:bBasedestructor:c我的问题是:为什么Base(b类型)的析构函数被调用