NOT: Bu site kullanımdan kaldırılmıştır. Site 31 Ocak 2023'ten sonra kapatılacak ve trafik https://protobuf.dev adresindeki yeni siteye yönlendirilecek. Bu sırada, yalnızca protobuf.dev'de güncellemeler yapılacak.

code_generator.h

#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler

Dile özgü kod oluşturma araçlarının her biri tarafından uygulanan soyut arayüzü tanımlar.

Bu dosyadaki sınıflar

Belirli bir dildeki belirli bir proto dosyasını uygulayan bir sınıfa ait soyut arayüz.
CodeGenerators belirli bir dizinde bir veya daha fazla dosya oluşturur.

Dosya Üyeleri

Bu tanımlar herhangi bir sınıfın parçası değildir.
typedef
GeneratorContext OutputDirectory
GeneratorContext türü daha önce Çıktı Dizini olarak adlandırılıyordu. devamı...
void
ParseGeneratorParameter(const std::string & , std::vector< std::pair< std::string, std::string > > * )
Bazı kod oluşturma araçları, parametre bağımsız değişkenini virgülle ayrılmış seçenek listesi olarak görür. devamı...
std::string
StripProto(const std::string & filename)
Dosya adının sonuna ".proto" veya ".protodevel" ekler.

typedef compiler::OutputDirectory

GeneratorContext türü daha önce Çıktı Dizini olarak adlandırılıyordu.

Bu tür, geriye dönük uyumluluk sağlar.


void compiler::ParseGeneratorParameter(
        const std::string & ,
        std::vector< std::pair< std::string, std::string > > * )

Bazı kod oluşturma araçları, parametre bağımsız değişkenini virgülle ayrılmış seçenek listesi olarak görür.

Bu yardımcı işlev, virgülle ayrılmış bir ad/değer çifti grubunu ayrıştırır: ör. "foo=bar,baz,qux=corge", çiftleri şu şekilde ayrıştırır:

("foo", "bar"), ("baz", ""), ("qux", "corge")

CodeGenerator sınıfı

#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler

Belirli bir dildeki belirli bir proto dosyasını uygulayan bir sınıfa ait soyut arayüz.

Bunlardan bazıları çeşitli dilleri desteklemek için CommandLineInterface'e kaydedilebilir.

Bilinen alt sınıflar:

Üyeler

enum
Feature
Plugin.proto ile senkronize edin. devamı...
CodeGenerator()
virtual
~CodeGenerator()
virtual bool
Generate(const FileDescriptor * file, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const = 0
Belirtilen proto dosyası için kod oluşturur ve belirtilen çıkış dizininde bir veya daha fazla dosya oluşturur. devamı...
virtual bool
GenerateAll(const std::vector< const FileDescriptor * > & files, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const
Belirtilen tüm proto dosyaları için kod oluşturur. devamı...
virtual uint64_t
GetSupportedFeatures() const
Bu kodu oluşturma aracının desteklediği özellikleri belirtmek için bunu uygulayın. devamı...
virtual bool
HasGenerateAll() const
Bu sınıf artık kullanılmıyor ancak bu sınıf, açık kaynak protobuf kitaplığının bir parçası olduğu için kitaplığın mevcut sürümü için vtable'ları aynı tutmalıdır. devamı...

enum CodeGenerator::Feature {
  FEATURE_PROTO3_OPTIONAL = = 1
}

Plugin.proto ile senkronize edin.

FEATURE_PROTO3_İSTEĞE BAĞLI

virtual bool CodeGenerator::Generate(
        const FileDescriptor * file,
        const std::string & parameter,
        GeneratorContext * generator_context,
        std::string * error) const = 0

Belirtilen proto dosyası için kod oluşturur ve belirtilen çıkış dizininde bir veya daha fazla dosya oluşturur.

Oluşturma aracına iletilecek bir parametre, komut satırında belirtilebilir. Bu kullanım amacı jeneratöre özgü parametrelerin iletilmesi için kullanılır. Herhangi bir parametre sağlanmamışsa boş olur. ParseGeneratorParameter (aşağıda) tek parametre komut satırı işareti içinde birden çok parametreyi kabul etmek için kullanılabilir.

Başarılı olursa doğru değerini döndürür. Aksi takdirde, *hata değerini sorunun açıklamasına (ör. "geçersiz parametre") ayarlar ve yanlış değerini döndürür.


virtual bool CodeGenerator::GenerateAll(
        const std::vector< const FileDescriptor * > & files,
        const std::string & parameter,
        GeneratorContext * generator_context,
        std::string * error) const

Belirtilen tüm proto dosyaları için kod oluşturur.

UYARI: Standart kod oluşturma aracı tasarımı, giriş .proto dosyası başına bir veya iki çıkış dosyası oluşturur, alternatif tasarımları teşvik etmek istemeyiz.

Parametre, yukarıdaki |Generate()| gibi komut satırında iletilmiş şekilde verilir.

Başarılı olursa doğru değerini döndürür. Aksi takdirde, *hata değerini sorunun açıklamasına (ör. "geçersiz parametre") ayarlar ve yanlış değerini döndürür.


virtual uint64_t CodeGenerator::GetSupportedFeatures() const

Bu kodu oluşturma aracının desteklediği özellikleri belirtmek için bunu uygulayın.

Bu, Eklenti.proto'daki Özellikler enum'unda bulunan özelliklerin bit tabanlı bir VEYA koşulu olmalıdır.


virtual bool CodeGenerator::HasGenerateAll() const

Bu sınıf artık kullanılmıyor ancak bu sınıf, açık kaynak protobuf kitaplığının bir parçası olduğu için kitaplığın mevcut sürümü için vtable'ları aynı tutmalıdır.

Protobufs bir API bozulması durumunda yöntem kaldırılabilir.

class GeneratorContext

#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler

CodeGenerators belirli bir dizinde bir veya daha fazla dosya oluşturur.

Bu soyut arayüz, CodeGenerator'ın çalıştığı dizini ve Jeneratör'ün çalıştığı bağlamla ilgili diğer bilgileri temsil eder.

Üyeler

GeneratorContext()
virtual
~GeneratorContext()
virtual io::ZeroCopyOutputStream *
Open(const std::string & filename) = 0
Belirtilen dosyayı açar, varsa keser ve dosyaya yazan bir ZeroCopyoutputStream döndürür. devamı...
virtual io::ZeroCopyOutputStream *
OpenForAppend(const std::string & filename)
Çıkış, Open() işlevine benzerdir ancak varsa çıkış dosyaya eklenir.
virtual io::ZeroCopyOutputStream *
OpenForInsert(const std::string & filename, const std::string & insertion_point)
Belirli bir ekleme noktasında belirtilen dosyaya kod ekleyecek bir ZeroCopyExitStream oluşturur. devamı...
virtual io::ZeroCopyOutputStream *
OpenForInsertWithGeneratedCodeInfo(const std::string & filename, const std::string & insertion_point, const google::protobuf::GeneratedCodeInfo & info)
OpenForInsert uygulamasına benzer, ancak info boş değilse filename.pb.meta dosyasını açar (veya oluşturur) ve gerekli vardiyalarla uygun yere bilgi ekler. devamı...
virtual void
ListParsedFiles(std::vector< const FileDescriptor * > * output)
Bu çalıştırmada derlenen tüm dosyalar için FileDescriptors vektörünü döndürür. devamı...
virtual void
GetCompilerVersion(Version * version) const
Bu GeneratorContext ile ilişkili protokol derleyicinin sürüm numarasını alır.

virtual io::ZeroCopyOutputStream *
    GeneratorContext::Open(
        const std::string & filename) = 0

Belirtilen dosyayı açar, varsa keser ve dosyaya yazan bir ZeroCopyoutputStream döndürür.

Arayan, döndürülen nesnenin sahipliğini alır. Bu yöntem asla başarısız olmaz (bunun yerine sahte bir akış döndürülür).

Belirtilen dosya adı, kaynak ağacın kök diziniyle göreli olmalıdır. Örneğin, "foo/bar.proto" kodunu oluştururken C++ oluşturma aracı, "foo/bar.pb.h" ve "foo/bar.pb.cc" dosyalarını oluşturur; bu dosya adlarına "foo/" harfinin dahil edildiğini unutmayın. Dosya adının "." veya ".." bileşenlerini içermesine izin verilmez.


virtual io::ZeroCopyOutputStream *
    GeneratorContext::OpenForInsert(
        const std::string & filename,
        const std::string & insertion_point)

Belirli bir ekleme noktasında belirtilen dosyaya kod ekleyecek bir ZeroCopyExitStream oluşturur.

Ekleme noktaları hakkında daha fazla bilgi için Plugin.proto'ya (plugin.pb.h) bakın. Varsayılan uygulama başarısız oluyor - yalnızca geriye dönük uyumluluk için mevcut.

UYARI: Bu özellik şu anda DENEYSEL olup değiştirilebilir.


virtual io::ZeroCopyOutputStream *
    GeneratorContext::OpenForInsertWithGeneratedCodeInfo(
        const std::string & filename,
        const std::string & insertion_point,
        const google::protobuf::GeneratedCodeInfo & info)

OpenForInsert uygulamasına benzer, ancak info boş değilse filename.pb.meta dosyasını açar (veya oluşturur) ve gerekli vardiyalarla uygun yere bilgi ekler.

Varsayılan uygulama info politikasını yoksayar.

UYARI: Bu özellik yakında kaldırılacaktır.


virtual void GeneratorContext::ListParsedFiles(
        std::vector< const FileDescriptor * > * output)

Bu çalıştırmada derlenen tüm dosyalar için FileDescriptors vektörünü döndürür.

Go gibi, dosyalar bir dizi olarak derlendiğinde dosyaları farklı şekilde ele alan diller için yararlıdır.