Как передать объект по значению?

import std.stdio;

class IntegerContainer
{
    public int Integer = 1;
}

void DoubleInteger(IntegerContainer Container)
{
    Container.Integer *= 2;
}

void main()
{
    IntegerContainer Container = new IntegerContainer; // Internal integer defaults to one.
    DoubleInteger(Container); // Internal integer changes to two inside the function.
    writefln(Container.Integer); // Prints "2."
}

В D отношение ссылки к значению является признаком типа, а не параметра функции. Исходя из C ++, мне это очень плохо.

Похоже, есть ключевое слово ref для принудительной передачи по ссылке для функций, принимающих struct s. Есть ли такой эквивалент для передачи class es по значению?

Например, скажем, я хочу создать функцию-функцию, которая возвращает отсортированную копию пользовательского класса контейнера. В C ++ это так же просто, как использовать Foo Sorted (Foo Object) , в отличие от Foo Sort (Foo & Object) . Я не вижу возможности сделать это в D без ручного копирования объекта.

7
задан Maxpm 9 May 2012 в 04:21
поделиться