- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Trong protobuf, chúng tôi có một số tùy chọn để triển khai tính kế thừa. "Mở rộng lồng nhau" là một trong số đó: http://www.indelible.org/ink/protobuf-polymorphism/
Điều thú vị ở đây là cách đọc tệp được tuần tự hóa. Chúng ta phải tạo Bản đồ để tương ứng Animal.type với mã định danh mở rộng của nó để chuyển đổi con vật thành Chó hoặc Mèo chính xác. Tuy nhiên, trong ví dụ do trang web trên cung cấp, ngôn ngữ được sử dụng là Python. Điều này có nghĩa là Bản đồ có thể được khởi tạo mà không cần chỉ định loại khóa hoặc loại giá trị. Và nó hoạt động rất tốt:
# Giải nén các byte được tuần tự hóa.
động vật = Động vật()
động vật.ParseFromString(byte)
# Xác định loại tiện ích mở rộng thích hợp để sử dụng.
Extension_map = { Animal.Cat: Cat.animal, Animal.Dog: Dog.animal }
tiện ích mở rộng = động vật.Extensions[extension_map[animal.type]]
Tuy nhiên, để triển khai ánh xạ như vậy trong C++, loại khóa và loại giá trị là bắt buộc. Vì vậy, tôi nên sử dụng loại giá trị nào để lưu trữ hai mã định danh mở rộng khác nhau vào cùng một bản đồ?
Bản đồ
?
Thật không may, điều này rõ ràng không hoạt động.
Tôi cũng sẽ sao chép-dán mô hình viết ở đây: nhập từ động vật_pb2 *
# Xây dựng kiểu thông điệp cơ sở đa hình.
động vật = Động vật()
Animal.type = Animal.Cat
# Tạo loại lớp con bằng cách tham chiếu loại phần mở rộng thích hợp.
# Lưu ý rằng điều này sử dụng trường tự tham chiếu (Cat.animal) từ bên trong
# tiện ích tin nhắn lồng nhau.
cat = động vật.Extensions[Cat.animal]
cat.delawed = Đúng
# Sắp xếp nội dung tin nhắn đầy đủ thành một chuỗi.
# trông đại khái như thế này: [ type [ declawed ] ]
byte = động vật.SerializeToString()
Hàm Extensions() cho phép chúng ta lấy các tiện ích mở rộng của nó bằng cách sử dụng mã định danh của tiện ích mở rộng.
câu trả lời hay nhất
Nếu tôi hiểu chính xác câu hỏi, bạn muốn lưu trữ bản đồ của đối tượng tiện ích mở rộng được xây dựng trong bản đồ để có thể truy cập được sau khi phân tích thông báo.
Trong trường hợp này, có khác nhauVà bất kìNhập vào tăng cường,thư viện pocoVẫn còn một số. Bạn có thể đặt loại khóa cố định (tức là loại enum hoặc chuỗi) và đặt loại giá trị thành loại biến thể:
#include
#include
#include
#include
#include
cấu trúc động vật {
std::loại chuỗi;
};
struct Dog : Động vật công cộng {
constexpr tĩnh const char* TYPE = "Con chó";
void vỏ cây() const {
std::cout<<"bow"<<>
}
};
struct Cat : động vật công cộng {
constexpr tĩnh const char* TYPE = "Mèo";
void meow() const {
std::cout<<"meo"<<>
}
};
Nhận nhà máy mở rộng từ tin nhắn:
mẫu
std::unique_ptr get_extension(Message m) {
thử {
Động vật a( boost::any_cast(m[Animal::TYPE]) );
//để đơn giản
return std::unique_ptr(Động vật mới(a));
} nắm lấy (...) {
trả về std::unique_ptr();
}
}
và cách sử dụng:
int main()
{
// mô phỏng tin nhắn protobuf
std::map m;
m[Dog::TYPE] = Dog();
m[Cat::TYPE] = Cat();
// giao diện chung cho phần mở rộng tin nhắn
chó tự động = get_extension(m);
nếu (con chó)
chó->vỏ cây();
mèo tự động = get_extension(m);
nếu (mèo)
mèo->meo meo();
}
gia hạn:phiên bản 2Có giao diện phổ quát cho động vật
Một nhiệm vụ thực tế có thể là bạn có một dải thông báo có phần mở rộng và bạn muốn tạo đối tượng một cách linh hoạt. Ở phiên bản thứ hai, bạn cũng có thể "nói chuyện với động vật" thông qua giao diện tương tự:
cấu trúc động vật {
ảo void speak() const = 0;
ảo ~Động vật(){}
};
struct Dog : Động vật công cộng {
constexpr tĩnh const char* TYPE = "Con chó";
ảo void speak() const {
std::cout<<"bow"<<>
}
};
// ... etc
Nhà máy đơn giản để khử tuần tự các loại động vật:
struct AnimalRegistry {
std::map <>()>> người sáng tạo;
mẫu
void register_creator() {
Creators[A::TYPE] = []() { return std::unique_ptr(new A });
}
mẫu
std::unique_ptr create(Message m) {
trả về người sáng tạo[m.animal_type]();
}
};
Cách sử dụng hơi khác một chút:
int main()
{
Cơ quan đăng ký động vật;
register.register_creator();
register.register_creator();
Message đã nhận_message { "Dog" /*đây là một phần của protobuf*/ };
chó tự động = register.create(received_message);
nếu (con chó)
chó->nói();
Nhắn tin another_message { "Cat" };
auto cat = register.create(another_message);
nếu (mèo)
mèo->nói();
}
Về c++ - Cách tạo ánh xạ có giá trị là mã định danh mở rộng protobuf trong C++, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19975595/
Tôi cần đặt văn bản vào một Div, trong một Div khác, trong một Div khác. Vì vậy, nó trông như thế này: #document Thay đổi mã PIN
Những điều kỳ lạ đã xảy ra. Tôi có một mã html cơ bản. html, đầu, thân. (Vì tôi nhận được một số lượt phản đối nên đây là mã đầy đủ) Đây là CSS của tôi: html { backgroun
Tôi đang cố tải một tập hợp hình ảnh từ Nội dung vào ImageView có trong UICollectionview nhưng bất cứ khi nào tôi chạy ứng dụng thì nó đều báo lỗi. Và cũng không có hình ảnh nào được hiển thị. Tôi đang ở ViewDidLoa
Tôi cần thay đổi một số biến môi trường dựa trên đầu ra của tập lệnh Perl có tham số. Trong tcsh, tôi có thể sử dụng lệnh bí danh để đánh giá kết quả đầu ra của tập lệnh Perl. tcsh: bí danh setsdk 'eval `/localhome/
Tôi đã tạo một ứng dụng Blazor (phía máy chủ) mới bằng Xác thực Windows và chạy nó bằng IIS Express. Nó sẽ hiển thị thông báo "Xin chào miền\Người dùng!" từ Ra sau ở trên cùng bên phải!
Đây là phương thức void login(Event event) của tôi; Tôi muốn biết cách thực hiện nó trong Kotlin. Câu trả lời hay nhất Trong Kotlin, toán tử ký tự đại diện là *. Nó báo cho trình biên dịch rằng nó chưa được biết, nhưng một khi đã biết thì không có lớp nào khác
Hãy xem đoạn mã sau cho câu chuyện trong sách nếu story.title.length < 140 - var story
Tôi đang cố gắng học xử lý chuỗi trong C. Tôi đã viết một chương trình lưu trữ một số bản nhạc và giúp người dùng kiểm tra xem bài hát mà họ nghĩ đến có tồn tại trong các bản nhạc được lưu trữ hay không. Điều này được thực hiện bằng cách yêu cầu người dùng nhập một chuỗi ký tự. Chương trình sau đó sử dụng strstr()
Tôi đang học sscanf và gặp chuỗi định dạng sau: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); Phần ] có nghĩa là quét cho đến khi gặp ':' và gán nó cho a. :
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
Tôi gặp tình huống muốn đưa các dòng hiện có từ tệp văn bản vào một khối mới. dòng 1 dòng 2 dòng trong khối dòng 3 dòng 4 sẽ trở thành dòng 1 dòng 2 dòng
Tôi có một dự án mới và tôi đang cố gắng thiết lập thanh công cụ gỡ lỗi Django. Trước tiên, tôi đã thử thiết lập nhanh, việc này chỉ đơn giản là thêm 'debug_toolbar' vào danh sách các ứng dụng đã cài đặt của tôi. Với điều này, khi tôi truy cập URL gốc của mình, việc gỡ lỗi
Trong Matlab, nếu tôi có hàm f, giả sử chữ ký là f(a,b,c), tôi có thể tạo một hàm chỉ có một biến b, biến này sẽ gọi f với a=a1 và c=c1 cố định: g = @(b) f(a1, b,
Tôi không hiểu tại sao lại có thêm khoảng cách dọc giữa các phần tử trong ForEach khi hiển thị các dải phân cách ngang tùy chỉnh bên trong VStack khi sử dụng GeometryReader bên trong ScrollView. Cuộn
Tôi đang tự hỏi, có hướng dẫn hoặc phương pháp hay nhất nào về thời điểm sử dụng phiên và cookie không? Những gì nên và không nên lưu trữ trong đó? Cảm ơn bạn! Câu trả lời hay nhất Những tài liệu này cung cấp sự hiểu biết tốt về các vấn đề bảo mật cookie phiên và
Tôi có ma trận Nx3 ở dạng scipy/numpy và tôi muốn sử dụng nó để tạo biểu đồ thanh 3 chiều, trong đó trục X và Y được xác định bởi các giá trị của cột thứ nhất và thứ hai của ma trận và chiều cao của mỗi thanh ở cột thứ ba của ma trận, số lượng thanh được xác định bởi N.
Giả sử tôi khởi tạo semaphore theo hai cách khác nhau sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) Bây giờ, sem_wait(&randomsem) trong cả hai trường hợp
Tôi nghi ngờ cách giá trị được lưu trữ trong "WORD" vì PStr chứa đầu ra thực tế. ? Vì Pstr lưu trữ chữ thường thành chữ in hoa, làm sao nó có thể được đưa ra dưới dạng "WORD" trong printf. Có ai có thể vui lòng không? Giải thích? #bao gồm
Tôi có một mảng 3x3: var my_array = [[0,1,2], [3,4,5], [6,7,8]];
Tôi nhận ra rằng bạn có thể dễ dàng kiểm tra tiêu điểm bằng cách sử dụng: var hasFocus = true; $(window).blur(function(){ hasFocus = false; });
Tôi là một lập trình viên xuất sắc, rất giỏi!