草庐IT

c++ - "Inheriting"具有可变模板函数的类

我想编写一个可以操作不同类型数据库(例如sqlite、postgres等)的数据库包装器,因此无论用户实际使用什么数据库,他们编写的代码都不会改变。在我看来,这需要一个抽象基类,例如:classdatabase{public:virtualboolquery(conststd::string&q)=0;//Otherstuff};classsqlite:publicdatabase{public:boolquery(conststd::string&q){//Implementation}};这看起来不错,但我正在使用可变参数模板来转义查询中的参数(我真的很喜欢这个想法,所以我想坚持下

c++ - 奇怪的类重新定义错误

我有一个奇怪的错误,说我的类正在重新定义,源于我的Node类中的friend声明。这是我当前的代码:templateclassNode{private:Tval;Node*next;public:friendclassOList;};任何我的其他类(class):templateclassOList{------>Errorhereprivate:Node*head;intsize;public:OList();OList(constOList&b);~OList();clear();intsize();TtGet(intinput);intcount(Tinput);insert(T

c++ - 什么是 C++ 基于策略的类设计的好教程?

我刚刚开始阅读ModernC++DesignGenericprogrammingandDesignPatternsApplied我想知道在开始之前是否需要学习一些关于基于策略的类设计的非常基础的教程。第1章会提供我需要遵循的所有内容吗?我已经熟悉模板使用(STL/boost/Poco)和编写模板类/方法。 最佳答案 根据我的经验,它几乎是一本自成一体的书,只要您熟悉C++。这是一个愚蠢的问题。直接翻书,有不懂的就自己查。为什么要问有关第1章的问题,因为您可以阅读并找出答案?恐惧是精神killer。

c++ - 代码块无法识别它编写的类的标题?

我目前正在编写一个小类来在Ubuntu11.10上的代码块10.05中用C++实现Smith-Waterman算法,虽然我在Windows上的代码块上遇到了完全相同的问题,但我添加了一个具有新类选项的类它似乎生成了有效的.h和.cpp文件。但是当我尝试在smithwaterman.cpp中编译时,它在它写的那行中给我一个错误#include"smithwaterman.h"说它不能找到文件。我可以清楚地看到项目中的文件位于include/smithwaterman.h并且我尝试放置include/但它没有帮助,如果我将它包含在它的完整路径中然后它看到了,但这似乎是一个非常不优雅的解决方

C++ 使用来自不同文件的类

我正在尝试编写一系列程序,这些程序使用相同的主文件(main.cpp),但具有不同的辅助源文件(object1.cpp、object2.cpp等)。所以我将基本上像这样编译它们:g++-oprogram1.exemain.cppobject1.cppg++-oprogram2.exemain.cppobject2.cpp我想要做的是让objectN.cpp定义一个实现了某些方法的类,这些方法将从主文件中调用。源代码看起来像这样:头文件(object.hpp)#ifndefINCLUDE_OBJECT_HPP#defineINCLUDE_OBJECT_HPPclassMyObjectIn

c++ - 堆与堆栈内存使用 C++ 用于动态创建的类

如果您在C++中使用非指针成员变量和非指针成员函数创建一个类,但您动态地(使用指针)初始化该类的实例,那么内存使用是来自堆还是堆栈?对于我正在处理的项目的有用信息,因为我正在尝试从堆栈中减少内存:)。非常感谢任何回复。非常感谢,编码愉快。 最佳答案 如果您使用运算符new来分配您的类,那么它会被放在堆上。成员变量是否通过指针访问无关紧要。classA{inta;float*p;};A*pa=newA();//requiredmemoryisputontheheapAa;//requiredmemoryisputonthestack但

c++ - 为具有 shared_ptr 数据成员的类复制构造函数?

我知道当类中有原始指针数据成员时如何编写复制构造函数,但是当使用shared_ptr管理它们时如何编写复制构造函数?是否有应该调用的copy()或clone()函数?有趣的是,我从未见过这样的例子。 最佳答案 std::shared_ptr的拷贝构造函数创建与第一个指针共享所有权的第二个指针。当所有std::shared_ptr时,指针将被销毁指向它的那一点被摧毁。如果没有显式声明复制构造函数,语言规范会规定将隐式提供合适的复制构造函数,并且它将调用类中每个成员的复制构造函数。因此,换句话说,为您的类提供的隐式复制构造函数将调用sh

c++ - 在没有虚方法或父类(super class)的类中,假设(第一个成员变量的地址)== this 是否安全?

我创建了一个私有(private)API,它假定类中第一个成员对象的地址与类的this指针相同......这样成员对象就可以简单地派生出指向该对象的指针它是的成员,而不必显式存储指针。鉴于我愿意确保容器类不会从任何父类(superclass)继承,不会有任何虚拟方法,并且执行此技巧的成员对象将是声明的第一个成员对象,将该假设对任何C++编译器都有效,还是我需要使用offsetof()运算符(或类似运算符)来保证正确性?换句话说,下面的代码在g++下实现了我所期望的,但它能在任何地方运行吗?classMyContainer{public:MyContainer(){}~MyContain

c++ - 是否可以保证包含数组的类的大小?

给定:templatestructval2size{charplaceholder[N];};是否可以保证sizeof(val2size)==N? 最佳答案 唯一的保证是sizeof(val2size)>=N在结构的末尾可能有未命名的填充。我不认为会有未命名的填充,但这是可能的。 关于c++-是否可以保证包含数组的类的大小?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3647

c++ - 将具有用户定义的构造函数的类填充到 union 中

classFoo{Foo(intval){/*Dosomeinitialization*/}Foo(){/*Donothing*/}};unionBar{Foofoo;};该代码生成此错误:错误C2620:union“Bar”的成员“Bar::foo”具有用户定义的构造函数或非平凡的默认构造函数我理解如果构造函数确实执行了某项操作,您为什么会抛出该错误,但此处的构造函数不采用任何参数且不执行任何操作。有什么办法可以把这个类(class)塞进union会吗?我不得不一直求助于charfoo[sizeof(Foo)]并且想要一个更简洁的解决方案。 最佳答案