2015-10-19 10 views

Odpowiedz

28

Rozumiem, że proto3 nie pozwala już wykrywać obecności pola i nie obsługuje już niezerowych wartości domyślnych, ponieważ ułatwia to wdrażanie protobufów w kategoriach "zwykłych starych struktur" w różnych językach, bez potrzeby generować metody dostępu. Jest to postrzegane jako ułatwiające korzystanie Protobuf w tych językach.

(osobiście uważam, że języki, które nie posiadają akcesorów i właściwości nie są bardzo dobre języków i protobuf nie powinny opracować do nich na dół, ale to nie jest już mój projekt).

+0

Szkoda, że ​​nie mogą po prostu wykryć obecności pola na drucie i zastosować brak umowy w przypadku jego braku. To samo w sobie powinno być agnostyczne. –

+2

@MeirionHughes - Wierzę, że problem pojawia się podczas tworzenia instancji nowego obiektu, a nie poza linią. Jeśli twój język nie zawiera pojęcia konstruktorów i nie ma koncepcji akcesorów, nie możesz zainicjować pól na wartości domyślne, niezależnie od serializacji. –

+0

Ale z pewnością można po prostu przypisać pola struct po zakończeniu budowy? Nie mogę wymyślić żadnego rozsądnego powodu, dla którego miałbyś język, który definiowałby niemożliwe do zainicjowania, niezmienne struktury ... –

0

W moim automatycznie wygenerowany plik .pb.cc widzę kilka miejsc tak:

if (this->myint() != 0) { 

i niewielu tak:

myint_ = 0; 

Dlaczego więc nie włączyć domyślnej wartości i zamiast tego wygenerować

static ::google::protobuf::int32 myint_defaultvalue = 5; 

... 
if (this->myint() != myint_defaultvalue) { 
... 

... 
myint_ = myint_defaultvalue; 
... 

?

Powiązane problemy