草庐IT

c++ - 在模板类的头文件中包含 .cpp 文件

我知道模板类的定义和实现应该在同一个头文件中。但我在学校的教育有所不同。我将在头文件中包含模板类的定义,并在头文件的末尾执行#include"MyFile.cpp",其中包含模板类的实现。这是糟糕的编程习惯吗? 最佳答案 "Isthisbadprogrammingpractice?"一般不会,这是一种非常常见的技术。但问题是.cpp文件扩展名,这会影响许多IDE和构建系统将其视为常规源文件。比较常用的扩展名是.tcc、.tpc。 关于c++-在模板类的头文件中包含.cpp文件,我们在St

c++ - QtCreator——显示一个类的成员函数列表?

I最近刚转用QtCreator进行C++编程。我很好奇,如何在屏幕右侧看到一个类的成员函数/变量列表?我认为很多IDE(例如Eclipse)都提供了这个功能,它对于帮助理解新代码非常有用。 最佳答案 您可以使用侧边栏(要查看侧边栏。选择窗口->显示侧边栏)在侧边栏面板中,右上角有一个列表选项,选择“类View”就可以了! 关于c++-QtCreator——显示一个类的成员函数列表?,我们在StackOverflow上找到一个类似的问题: https://sta

c++ - 如何使大量现有功能在类的范围内可用?

我需要将一个大型(100个源文件)项目放入一个库中,通过将它们全部放入一个类对象中来删除数十个全局变量。问题是现在需要成为此class成员的大约一千个函数这样他们就可以访问对象变量。除了添加MyClass::之外对于源文件中的每个函数定义,是否有一种方法可以欺骗并指示特定源文件中的所有函数都应该是MyClass的一部分范围? 最佳答案 将所有全局变量添加到命名空间。//MyGlobals.hnamespaceMyGlobals{externintg_i;externdoubleg_d;externAg_A;}无论您想访问什么文件,请

c++ - 返回指向类中类的指针

这是我第一次做这样的事情,所以我有点不确定我需要怎么做。我有一个非常简单的类,其中包含一些简单的值和一些getter:classNucleotide{private:charBase;intPosition;intPolymorphic;public:Nucleotide(charch,intpos);intgetPos();chargetBase();intgetPoly();};这个类存在于另一个包含它们的vector的类中:classNucleotideSequence{private:std::stringName;std::vectorSequence;public:Nucl

创建其构造函数引用全局变量的类的全局实例时,c++程序崩溃

我正在尝试创建一个类的全局实例,该类的构造函数引用了一个全局变量。程序编译没有错误。但是当它运行时,它会在引用全局变量时崩溃。如何在构造函数不崩溃的情况下创建此类的全局实例?这是我做的SSCCE:/*main.cpp*/#include"TestClass.h"//IneedaglobalinstanceofTestClassTestClassj;intmain(){return0;}-/*C.h*/#ifndefC_H_INCLUDED#defineC_H_INCLUDED#include//globalexternconststd::stringS;#endif//C_H_INCL

c++ - 模板类的虚函数是隐式实例化的吗?

考虑以下代码。是否保证Derived::foo()会被实例化吗?foo()是虚函数,由基类的非虚函数调用。#includeclassBase{public:voidbar(){foo();}private:virtualvoidfoo()=0;};templateclassDerived:publicBase{public:Derived(Tt_):t(t_){}private:voidfoo()override{std::coutmake_obj(){returnDerived(7);} 最佳答案 标准部分14.7.1/11说It

c++ - 在不知道是哪个类的情况下调用C++成员函数指针

我正在尝试调用一个成员函数,可能给定了对象指针,但不知道该成员函数来自哪个类。这可能吗?基本上我想要像下面这样的东西工作。classFoo{public:Foo(void*object):obj(object){}voidcallFunc(void(*func)()){obj->*func();}private:void*obj;};classBar{public:Bar():foo(this){}voidcallSomeFunc(){callFunc(someFunc);}voidsomeFunc(){cout 最佳答案 它看起来

c++对模板类的用户定义运算符的隐式转换

我有一个结构模板A和一个+运算符int.#includetemplatestructA{inta;};templateintoperator+(Aa,intb){returna.a+b;}我创建了一个结构模板B,可转换为A.templatestructB{intb=3;operatorA(){return{b+10};}};现在我要B转换为A打电话时B+int.intmain(){std::cout{9}+10){9}+10)我读了Implicitconversionwhenoverloadingoperatorsfortemplateclasses并写道templatestructB

c++ - 使用 enable_if 禁用模板类的模板构造函数

当模板构造函数的参数类型与类型“MyClass匹配时,我试图使用std::enable_if禁用模板类的模板构造函数"这样我就可以使用我的其他构造函数,它允许我用另一个模板的类初始化当前模板的类。templateclassMyClass{public:MyClass(){data.fill(static_cast(0));}template//iwanttodisablethisifArgs=MyClassMyClass(Args&&...args):data{std::forward(args)...}{}templateMyClass(constMyclass&other_size

c++ - 如何在 C++ 中声明一个 friend 是另一个尚未定义的类的成员函数?

我如何声明B的构造函数是A的友元?我试过:classA{private:A();public:friendB::B();};classB{public:B();}; 最佳答案 将B::替换为class;classA{private:A();public:friendclassB;};classB{public:B();}; 关于c++-如何在C++中声明一个friend是另一个尚未定义的类的成员函数?,我们在StackOverflow上找到一个类似的问题: h