小编Jer*_*unh的帖子

带有Scale的C++维度分析(Barnes和Nackman)

我最近正在阅读关于C++ Source的系列文章,"暂停反思:五个五个列表".在第五部分中,Scott Meyers讨论了Barton和Nackman解决单位问题的方法.作为航空航天业的嵌入式软件工程师,这个特别的啊哈!片刻让我很兴奋.到目前为止,我还没有听说过这种方法(也没有这些作者).

我已经做过研究,试图找到有关该解决方案的更多信息.我在这里看到了这个演讲:http://se.ethz.ch/~meyer/publications/OTHERS/scott_meyers/dimensions.pdf

我想我理解了我在这个解决方案上所阅读的所有内容.但我觉得有一块拼图丢失了.这个美丽,优雅的解决方案无处可扩展.具体来说,我对转换不仅仅是一个倍增因素感兴趣.例如,温度在开尔文,摄氏和华氏之间转换.我希望能够互换使用这些温度.

我的问题:

  1. 我错过了什么?是否参考了我忽略的单位解决方案讨论,在某处讨论了规模?

  2. 如果没有,我怎么能进一步解决这个问题?是否存在可与B&N方法结合使用以完成解决方案的现有模式?

我的目标是能够在没有过多计算的情况下使用类似下面示例的代码.在距离的情况下,我希望能够声明一个定义为英里的对象,并以英里为单位执行所有相关计算,而不必经常来回转换为米.

例:

typedef Units<double, miles>      uMiles;
typedef Units<double, kilometers> uKilometers;

uMiles      d1 (1.0);
uKilometers d2 (1.60934);

d1 += d2;
if (d1.val(miles) == 2.0) // PASS
if (d1.val(kilometers) == 3.21869) // PASS
Run Code Online (Sandbox Code Playgroud)

注意:我已经看到了BOOST UNITS解决问题的方法,我不喜欢它.对我来说这是非常难以理解的.我也不是,通常允许使用外部库,如boost.

资料备份:

单位类如下所述:

template<class T, // Precision
    int m, // Mass
    int l, // Length
    int t, // Time
    int q, // Charge
    int k, // Temperature
    int i, // Luminous Intensity
    int a> // …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns

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

继承模式

我发现我的命名惯例相当麻烦.我似乎过多地重复使用了孩子的具体名字.在我的下面的例子中,我有一个Widget,它有一个连接,它有一个配置.这些对象中的每一个都具有Foo和Bar类型的专用类.

所以我的FooWidget有一个Foo-Connection,它有一个Foo-Config.对于Bar来说也一样.在C++中,我最终得到了九个不同的头文件.

  • widget.h
  • connection.h
  • config.h中
  • foo_widget.h
  • foo_connection.h
  • foo_config.h
  • bar_widget.h
  • bar_connection.h
  • bar_config.h

我不能帮助,但看看这感觉它是不对的.我的直觉告诉我需要改变一些事情.这就像有一个设计模式可以利用.但我找不到更好的解决方案.

所以我想我的问题如下:是否有一种设计模式可以改善这种设计?

在此输入图像描述

- 我正确地纠正了我的问题.请原谅,随着问题本身变得更加明确,我会更新.

c++ oop design-patterns

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

C++外部/多个定义

我试图使用externs在C++中与Ada连接.这两个实现有什么区别?

实施A.

namespace Ada
{
    extern "C"
    {
        int getNumber();
        int index;
        int value;
    }
}
Run Code Online (Sandbox Code Playgroud)

实施B.

namespace Ada
{
    extern "C"
    {
        int getNumber();
    }
    extern "C" int index;
    extern "C" int value;
}
Run Code Online (Sandbox Code Playgroud)

两种实现都编译得很好.但Impl-A无法链接,我得到索引的多重定义错误.我只是想了解这些差异.

c++ extern

3
推荐指数
2
解决办法
3683
查看次数

当比较Ada Scalar类型和子类型时,我需要进行范围检查吗?

将Ada Scalar类型与受约束的子类型进行比较时,是否需要进行范围检查?

我知道在从基类型赋值给受约束的子类型时,如果我不确保该值在赋值之前在范围内,那么我在运行时会遇到Range_Check异常的风险.

但是在进行比较时这也是正确的吗?我认为,由于用户想要的唯一知识是布尔结果,因此不需要隐式转换为基本类型或范围检查.

请注意:我正在寻找引用Ada95 LRM的答案.

declare
  type Day_Type is (SUN, MON, TUE, WED, THU, FRI, SAT);
  subtype Workday_Type is MON .. FRI; 

  Payday : constant Workday_Type := FRI;

    ...

  function Is_Payday (Day : Day_Type) 
      return Boolean is
  begin  
      return (Day = Payday);
  end Is_Payday;

begin

    -- Will this raise a RANGE_CHECK error in Is_Payday()?
    if Is_Payday(Day => SAT) then 
       ...
    elsif Is_Payday(Day => FRI) then
       ...       
    end if;

end;
Run Code Online (Sandbox Code Playgroud)

我到目前为止所发现的......

我还没有找到完整的答案.但我确实找到了几个有趣的数据.

离散类型的操作/第3.5.5章第12节它说: …

types exception ada

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

Ada95 子子单元可以用于分隔代码以实现可维护性吗?

我创建了一个 Ada 类,其实现已经变得相当大。我有一个仅限多个主体的方法,出于可维护性/可读性的目的,我想将其移动到单独的文件中。

  • 我对 Ada95 分离的理解是每个文件只能有一种方法。我有大约 20 个想要分离的方法,但我不希望为此函数创建 20 个单独的文件。

  • 为了分离代码,我想我可以创建一个子包。然后父类就可以调用子类了。

问1 In Ada, Is it wrong/undesirable for a Parent Body unit to depend on a child Unit?

编辑:上述问题太模糊,任何答案都是主观的。

问题2 How can I divide my code into separate files without creating an over abundance of files?

ada

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

标签 统计

c++ ×3

ada ×2

design-patterns ×2

exception ×1

extern ×1

oop ×1

types ×1