小编drm*_*elr的帖子

如何创建一个抽象的,不可变的类?

这是简短的版本.首要的是:我希望我的班级不变.我知道一堂课既不是抽象的,也不是最终的.我要问的是:有没有办法允许内部类扩展和实现外部的抽象类?这可能不是实现我不可改变的目标的最佳方法,所以如果有人有更好的设计,我很乐意听到它.

我正在为矢量运算编写一个类 - 如物理和工程,而不是编程意义.(我也知道JScience有这个东西的包.我想写自己的,并保持简单.)

我喜欢Java几何包中使用的模式,其中,例如,a Line2D可以使用两个精度级别之一创建:float或double.

public abstract class Line2D {
    public static class Float extends Line2D { /* Implementation */ }
    public static class Double extends Line2D { /* Implementation */ }
}
Run Code Online (Sandbox Code Playgroud)

这是我真的想在课堂上加入和扩展的功能,所以我创建了以下内容:

public abstract class Vector2D {

    public final static class Integer extends Vector2D {

        // Component length projected along x/y axis, respectively
        final private int i, j;

        public Integer( int i, int j ) {
            this.i = …
Run Code Online (Sandbox Code Playgroud)

java abstract-class immutability

22
推荐指数
2
解决办法
2148
查看次数

面向对象或模块化文件和数据I/O的技术?

似乎每次我编写任何处理提取,推送,读取或写入操作的代码时,整个代码段都是临时的,丑陋的,并且在该确切应用程序的上下文之外完全无法使用.更糟糕的是,每当我设计这些东西时,我都必须重新发明轮子.在我看来,I/O操作的本质是非常线性的,并不适合模块化或面向对象的模式.

我真的希望有人能告诉我这里错了.是否存在面向对象或模块化文件和数据I/O的技术/模式?我可以遵循一些约定来添加一些代码重用性吗?我知道存在各种工具来简化单个文件的读取,比如XML解析器等,但我指的是使用这些工具的较大设计.

问题不仅限于单一语言; 我在Java,C,Matlab,Python和其他人中遇到过同样的问题.

这个问题的子主题是关于什么对象应该调用保存的问题.这个问题似乎是指工厂模式,其中文件的内容被构建,然后最终写入磁盘.我的问题是关于整体架构,包括用于写操作的工厂,还有用于读取/获取操作的(Insert Pattern Here).

我能想到的最好的东西是外立面图案......但圣洁的烟雾是那些丑陋的立面的代码.

有人请告诉我一个模式,我可以重新使用我的一些代码,或者至少遵循一个模板用于将来的读写.

有人在这里询问模块化设计,但答案是针对该提问者的问题,并不是完全有用的.


这只是一个例子,它基于我去年做的一个项目.随意提供一个不同的例子.

我们的程序是一个物理沙箱.我们想要加载描述该沙箱中对象的物理属性的XML数据.我们还需要加载包含3D渲染信息的.3DS文件.最后,我们需要查询SQL数据库以找出谁拥有哪些对象.

我们还需要能够支持3D模型格式.我们还不知道那些文件会是什么样子,但我们希望提前设置代码框架.这样,一旦我们获得新的数据模式,就可以快速实现加载例程.

来自所有3个来源的数据将用于在我们的软件中创建对象的实例.

之后,我们需要将物理信息(如位置和速度)保存到数据库,并将自定义纹理信息保存到本地文件.我们不知道纹理的文件类型是什么,所以我们只想布置代码结构,以便我们以后可以输入保存代码.

如果没有某种设计模式,即使是少量的对象也会迅速导致紧密耦合的网络.

没有模式网络

外观可以将对象/数据与相应的文件分离,但所有这一切都将问题集中在输入和输出外观中,这可能会在匆忙中变成一场噩梦般的混乱.此外,对象/数据现在与立面紧密耦合,因此实际上没有获得模块化.

门面网络


从3周前编辑...

以前,我提出了一堆伪问题来解决我第一次提出这个问题时遇到的问题,但我已经决定它混淆了我的主要问题.我只想说:我必须在这个特定的读取操作集中使用大约2000行真正不稳定的代码,它在处理和组织方面做得非常少,而且我再也无法在另一个项目上使用它了.

我想避免将来编写这样的代码.

oop io design-patterns modularity

8
推荐指数
1
解决办法
599
查看次数

如何让MatLab找到Visual C++编译器?

序言:我在写这篇文章的过程中找到了一个解决方案,这个问题是一个PITA并且有一个复杂的解决方案.因此,我觉得有必要离开这里帮助任何有这个问题的穷人.


我是MatLab的新手,我通常也不使用Visual C++,所以请原谅我,如果这应该是非常明显的.

简短版本:我的计算机上安装了Visual C++ 2013,但mex在运行时找不到它mex -setup c++.我得到以下内容:

>>mex -setup cxx

使用mex时出错

未找到支持的编译器或SDK.您可以安装免费的MinGW-w64 C/C++编译器; 请参阅安装MinGW-w64编译器.有关更多选项,请 访问http://www.mathworks.com/support/compilers/R2015b/win64.html.


这是完整的情况.

  • 操作系统:Windows 10 Home
  • 编译器:Visual Studio 2013(v120,最新版)
    • 我确认我可以使用此工具集编译和运行程序.
  • MatLab版本:2015b

我最初运行Visual Studio 2015,而mex发现编译器就好了.但是,我很快发现Simulink与VS 2015不兼容,所以我不得不回滚到VS 2013,这就是我的问题开始的时候.

我和其他许多人一起试过以下网站来寻找解决方案:

然后我走了一个兔子洞.

  1. 一个非常旷日持久的mathworks.com回答,提示其他链接.这导致我......

  2. 另一个mathworks.com回答听起来像我的问题,并建议修补我的设置.事实证明我没有安装SDK 7.1.所以,我去安装,并得到这个错误:

    某些组件无法安装.某些Windows SDK组件需要RTM .NET Framework 4 ...

  3. 这个Stack Overflow问题询问了这个问题,我遇到了与DaniloGadêlha已经安装的.NET Framework 相同的问题.

    我尝试了最佳答案,并删除了我能找到的任何版本的.NET框架的每一个引用,包括"Windows功能"下的那些,我仍然无法安装.

    我尝试了下一个选项,即使在安全模式下,RegEdit也不会让我更改下一个答案建议的值,所以这是一个破产.

    最后,我尝试了MandM的解决方案,最终解决了我的问题链.

c++ matlab mex visual-studio

6
推荐指数
1
解决办法
1万
查看次数

双倍乘以加速度

背景

我是航空航天工程和EECS学生.我正处于大量数学和物理学的工作,但尚未进入算法或汇编语言.

我设计和编写了各种各样的程序,从商业建议软件到卫星硬件控制器.

这项工作大部分涉及在其他媒介中进行数学运算,然后编写代码来实现它.

在将它们放入代码之前,我代数地简化了这些方程式.但是在我花时间这么做之前,我想知道我是否应该支持更多的加法运算,或者更多的乘法运算.(我已经知道分工的成本要高得多.)


B sub-x prime

这是我从其他一些工作中得出的等式,这是我所看到的非常典型的.

我们可以清楚地看到,至少有一些方法可以简化这个等式.由于简化是我的决定,我想挑选尽可能多的有利于性能的选项实用.我不打算以算法设计时为代价获得前沿性能.


问题

一般来说,哪种双重操作更快:加法或乘法?

我知道知道哪个更快的唯一明确方法是编写和运行基准测试,但这不是重点.对于每次我需要简化方程式时编写测试代码的合理性,这不是一个足够高的优先级.我需要的是一个适用于我的代数的经验法则.

如果差异是如此微小,以至于边界可忽略不计或不确定,这是一个可以接受的答案,只要我知道它几乎没有区别.


支持研究

我知道,在C和C++中,优化器会处理代数,因此它是一个空问题.但是,据我所知,Java编译器不进行代数简化/优化.具体来说,这个答案表明情况就是这样,程序员应该进行这种优化.

互联网上存在分散的答案,但我无法得出确凿的答案.一位前马里兰大学物理系的学生在Java上运行这些测试,但表中没有双重性能数据,图表比例使结果难以辨认.这个魁北克大学CS教授的测试只揭示了整数运算的结果.这个SO答案解释说,在硬件层面上,乘法是一个更复杂的操作,但我也意识到工程师在设计处理器时要记住这些事情.

其他有用的链接:

java algorithm double optimization performance

5
推荐指数
1
解决办法
954
查看次数

Eclipse上的Ubuntu:没有规则使用现有的makefile/project来制作目标`all'错误

我正在运行安装了CDT的Eclipse 3.7.2.Ubuntu 12.04 LTS.

我有一个现有的makefile C++项目,我试图从Geany导入.我可以$ make在项目的根目录中运行,并且所有内容都按预期构建.

在Eclipse中的错误:

make:***没有规则让目标"全部".停止.

我的问题:如何消除此错误?

以下是我正在采取的确切步骤:

  1. 文件>新建>包含现有代码的Makefile项目.
    • 现有代码位置设置为项目的根目录.
    • 语言设置为C++
    • 工具链设置为Cross GCC
  2. 在项目属性> C/C++ Build ...
    • 在Builder设置中......
      • 使用默认构建命令
      • 不自动使用生成makefile(不可用)
    • 在行为......
      • 使用Build(Incremental build)<< all
      • 使用Clean << clean

Eclipse CDT:没有规则使目标全部接近回答我正在尝试纠正的问题,但我有与OP相同的问题:生成makefile自动不可用.

我已经尝试过制作:***没有规则可以制作目标"全部".停止.Eclipse错误的最高评级解决方案.但是,当我取消选中Build(Incremental Build)选项时,build完全没有任何功能,所以这也不对.

c++ makefile eclipse-cdt makefile-project

3
推荐指数
1
解决办法
7443
查看次数