Почему замена атрибута version и path зависимости на git-хеш вызывает ошибку компиляции?

Если у вас есть базовый класс A и производный класс B, вы можете сделать следующее.

void wantAnA(A myA)
{
   // work with myA
}

B derived;
// work with the object "derived"
wantAnA(derived);

Теперь для метода wantAnA нужна копия derived , Однако объект derived не может быть полностью скопирован, так как класс B может изобретать дополнительные переменные-члены, которые не находятся в его базовом классе A.

Поэтому, чтобы вызвать wantAnA, компилятор будет «срезать» все дополнительные члены производного класса. Результатом может быть объект, который вы не хотите создавать, потому что

  • он может быть неполным,
  • ведет себя как объект A (все особые поведения класс B теряется).
0
задан Shepmaster 24 March 2019 в 14:27
поделиться

1 ответ

Это та же проблема, что и . Почему черта не реализована для типа, в котором она явно реализована? версия кода (через tarpc = { path = "../tarpc" }), вы компилируете tarpc ящик два разных раза. Характерные черты каждого из них не совпадают, они фактически являются различными версиями одного и того же ящика.

Это можно проверить с помощью cargo tree -d -i:

tarpc-lib v0.2.0 (https://github.com/google/tarpc.git?rev=06544faa5a0872d4be989451afc0a2b1e1278df4#06544faa)
└── tarpc-bincode-transport v0.3.0 (https://github.com/google/tarpc.git?rev=06544faa5a0872d4be989451afc0a2b1e1278df4#06544faa)
    └── tarpc-example-service v0.2.0 (/private/tmp/tarpc/example-service)

tarpc-lib v0.2.0 (/private/tmp/tarpc/rpc)
└── tarpc v0.14.1 (/private/tmp/tarpc/tarpc)
    └── tarpc-example-service v0.2.0 (/private/tmp/tarpc/example-service)

tarpc-trace v0.1.0 (https://github.com/google/tarpc.git?rev=06544faa5a0872d4be989451afc0a2b1e1278df4#06544faa)
└── tarpc-lib v0.2.0 (https://github.com/google/tarpc.git?rev=06544faa5a0872d4be989451afc0a2b1e1278df4#06544faa)
    └── tarpc-bincode-transport v0.3.0 (https://github.com/google/tarpc.git?rev=06544faa5a0872d4be989451afc0a2b1e1278df4#06544faa)
        └── tarpc-example-service v0.2.0 (/private/tmp/tarpc/example-service)

tarpc-trace v0.1.0 (/private/tmp/tarpc/trace)
└── tarpc-lib v0.2.0 (/private/tmp/tarpc/rpc)
    └── tarpc v0.14.1 (/private/tmp/tarpc/tarpc)
        └── tarpc-example-service v0.2.0 (/private/tmp/tarpc/example-service)

Если вы постоянно используете версию из git, она будет работать:

tarpc = { git = "https://github.com/google/tarpc.git", rev = "06544faa5a0872d4be989451afc0a2b1e1278df4", features = ["serde1"] }
0
ответ дан Shepmaster 24 March 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: