草庐IT

抽象代数

全部标签

c++ - 如何通过更好的抽象来避免 typeid?

我在我的代码中使用了typeid,但在我看来,如果我避免使用typeid,代码会更清晰。如果我们要存储类的类型,为什么我们首先要选择面向对象的语言呢?但我一遍又一遍地看到这种模式,我不知道如何避免它。所以我在想是否可以通过更好的抽象将这段代码写得更干净?代码如下:classA{public:stringtype;};templateclassB:publicA{public:B(){type=typeid(T).name();}};classRegistry{private:std::vectorlist;public:voidappend(A*a){intfound=0;for(A*

线性代数的艺术

推荐一本日本网友KenjiHiranabe写的《线性代数的艺术》。这本书是基于MIT大牛GilbertStrang教授的《每个人的线性代数》制作的,通过可视化的、图形化的方式理解和学习线性代数。全书内容不长,算上封面再带图一共也就12页。书中内容都是图解形式呈现,尤其矩阵这一块,描述很清楚,小白也能轻松看懂。原文完整版PDF:https://pan.quark.cn/s/e5112a1a7e5e书中内容是从理解矩阵开始的,在这一环节一共展示了4个视角。有了矩阵的概念之后,作者接着由浅入深地介绍了一些运算方式。作者依旧是用图的形式讲解,并从不同的视角进行分析,具体包括:向量乘向量矩阵乘向量矩阵乘

c++ - MFC 中的抽象基类是否需要 DECLARE_DYNAMIC?

我有一个派生自MFCCView类和模板化类的基类,例如;templateclassCMytViewT:publicCView,publicCMyTemplateClassT{DECLARE_DYNCREATE(CMyViewT)private:CMyViewT();'''}IMPLEMENT_DYNCREATE(CMyViewT,CView)现在我猜测MFC宏会被模板打乱,并且正在考虑删除此类的动态创建宏,并为模板的每个特化重新引入它。例如templateclassCMytViewT:publicCView,publicCMyTemplateClassT{public:CMyViewT

c++ - 关于纯抽象类中的静态成员函数 - 设计模式?

我最近发现了一个在纯抽象类中使用静态成员函数来初始化指向其派生类对象的指针的例子。我想知道,这是一种设计模式还是一种良好的编程习惯?下面的代码只是一个例子(例如defineRectangle()和defineCircle()成员函数):classShape;typedefstd::unique_ptrshape_ptr;classShape{public:Shape(){};virtual~Shape(){};virtualvoiddraw()const=0;virtualfloatarea()const=0;virtualshape_ptrclone()const=0;virtual

c++ - 如何从纯抽象基类引用创建对象拷贝?

我想编写一个适用于特定层次结构中的任何派生类的函数,而不修改抽象类输入参数:classA{public:A(intval):m_i(val){}virtualvoidadd(inti)=0;intm_i;};classB:publicA{public:B(intval):A(val){}B():A(0){}virtualvoidadd(inti){m_i+=i;}};classC:publicA{public:C(intval):A(val){}C():A(0){}virtualvoidadd(inti){m_i+=i*2;}};intf(constA&base_class){//ho

c++ - 具有复数的任意精度线性代数 c/c++ 库

我正在进行一项研究,涉及4维相空间中具有复数系数的线性微分方程。为了能够检查关于解的根的一些假设,我需要能够以任意精度在数值上求解这些方程。我曾经使用mpmathPython模块,但它运行缓慢,所以我更喜欢用C/C++重写我的程序以获得最大性能。所以我有一个问题:是否存在同时支持任意精度算术和复数的C/C++线性代数库?我需要一些基本功能,如点积等。(其实我也需要矩阵指数,但如果有需要我可以自己实现)。我尝试使用Eigen与MPFRC++,但由于它不支持复数这一事实而失败(并且像complex这样的构造不起作用,因为它假定基本类型是标准float)。 最佳答

c++ - 为什么抽象派生类需要初始化一个虚基类?

这个问题在这里已经有了答案:Inanabstractclassconstructor,whyIdoneedtocallaconstructorofavirtualbasethatwillnevertocalled?(1个回答)关闭7年前。请看下面的代码:structObject;structComponent{Component(Object*obj){}};structRenderable:publicvirtualComponent{virtualvoidRender()=0;};structAnimationRenderer:publicRenderable{AnimationR

C++ 可变参数模板在虚拟抽象的外部未解析

今天我为我的项目编写代码,并在链接器外部遇到Unresolved问题,代码必须生成具有多个虚拟抽象方法的类-作为类集合的基础。所以我决定为此任务使用可变参数模板-但出现了错误。templatestructpin_tag{};//inputstemplateclassinputs_base:publicinputs_base{protected:typedefinputs_basebase_type;usingarg_type=T0;//usingbase_type::_in;virtualvoid_in(T0const&t,pin_tag)=0;};templateclassinput

深度学习与神经网络pytorch版 2.3 线性代数

深度学习与神经网络pytorch版2.3线性代数目录深度学习与神经网络pytorch版2.3线性代数1.简介2.线性代数2.3.1标量​编辑2.3.2 向量2.3.3 矩阵2.3.4张量及其性质2.3.5 降维2.3.6 非降维求和2.3.7 点积2.3.8 矩阵-向量积2.3.9 矩阵-矩阵乘法2.3.10 范数3.小结1.简介 深度学习与线性代数之间有着密切的联系。线性代数是深度学习算法中用于表达和处理数据的数学工具之一,尤其是在构建神经网络和处理多维数据时。线性代数中的基本概念包括向量、矩阵和线性变换等,这些概念在深度学习中有着广泛的应用。例如,在神经网络的训练过程中,权重和偏差可以看作

c++ - 将具有 unique_ptr 的类的构造函数作为成员复制到抽象类

我有一个类(C),它有一个vector的unique_ptr到一个抽象类(A)作为成员(member)。这是因为C必须与A类型的所有类一起工作,即它的子类。问题是我不知道如何为C编写复制构造函数,因为指针指向的对象的类型在编译时是未知的。在我看来这实际上是不可能的。任何人都可以确认这是不可能的吗?你对如何解决这个问题有什么建议吗?有一个没有复制构造函数的类是不是太糟糕了? 最佳答案 你没有说你是否控制抽象类和从它派生的类的代码。如果这样做,那么最简单的方法是在抽象类中提供一个纯虚方法Clone并在派生类中实现它。此方法应处理创建正确