繁体   English   中英

将 C++ 成员初始化构造函数转换为 Julia

[英]Translating C++ member initialisation constructor to Julia

我在 C++ 中有这个 class 并想在 Julia 中复制它。

class Clock
{
  double epsilon;
  double dt;
  int64_t timestep;
  double t;
  Clock(double _epsilon=1e-14) : epsilon(_epsilon)
};

到目前为止我有

mutable struct Clock
    epsilon::Float64
    dt::Float64
    timestep::Int64
    t::Float64
    #Need the constructor#
end

我相信最接近 C++ 的行为如下:

mutable struct Clock
    epsilon::Float64
    dt::Float64
    timestep::Int64
    t::Int64

    Clock(epsilon=1e-14) = new(epsilon) 
end

这使得字段的 rest 不完整 由于它们具有所谓的位类型,因此它们实际上已被初始化,但具有未定义的值(与 C++ 相反,它们未初始化,IIUC),因此在没有赋值的情况下访问字段不会出错(对于非位类型,比如数组)。

该结构必须是可变的,否则在构造值之后您无法更改字段并且永远留下一堆垃圾。

但是可以说,不完全初始化并不是特别惯用的,或者至少要尽可能避免。 我宁愿这样写类型:

struct Clock
    epsilon::Float64
    dt::Float64
    timestep::Int64
    t::Int64
end

Clock(epsilon=1e-14) = Clock(epsilon=epsilon, 0.0, 0, 0)

(或任何对您有意义的默认值),并坚持使用不可变函数来操作它。 第二个变体使用外部构造函数,它基本上只是类型上的一个方法(特殊的东西,如new和不完整的初始化仅在内部构造函数中可用)。 这个外部构造函数调用默认提供的内部构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM