2011-11-06 33 views
7

Một câu hỏi tùy chỉnh và thực hành, nhưng nó được coi là hình thức nghèo, hoặc rất khó lường (chọn giải thích của bạn về badness) để pha trộn việc sử dụng các loại thư viện Qt và các loại C++ tiêu chuẩn tương tự trong một chương trình? Ví dụ:Qt - trộn Qt và std :: C++ loại

Ví dụ: bạn có nên sử dụng CHỈ QStrings để sử dụng chuỗi hay mọi người thường trộn QString và std :: các loại chuỗi trong tệp nguồn?

Tôi đã kế thừa một số mã bao gồm việc sử dụng QString và std :: chuỗi trong một tệp và tôi tự hỏi liệu có nên chuyển đổi mọi thứ thành một hay cái khác không.

Trả lời

7

Tôi nghĩ rằng nó thực sự đi xuống để "nó phụ thuộc vào những gì bạn đang làm." Chắc chắn, nó là dễ dàng hơn để giữ mọi thứ như chỉ có một loại. Tuy nhiên, có thể có thời gian khi bạn cần phải vượt qua std :: strings hoặc vượt qua QStrings và nó có thể là hiệu suất tốt hơn-khôn ngoan để không làm việc chuyển đổi.

Cũng xin lưu ý rằng QStrings không giống như std: strings. Vì vậy, hãy ghi nhớ điều đó khi chuyển đổi giữa chúng (hoặc chọn chỉ sử dụng một loại nhất định).

3

Nói chung tôi thích sử dụng QString qua std::string và container Qt (như QList ...) trên std container trong mã đó được kết hợp chặt chẽ với các khuôn khổ Qt, dù sao và sẽ không có ý nghĩa mà không có nó. Trong tất cả các thành phần khác (như các thư viện phụ trợ và các loại tương tự), tôi thích sử dụng cách thức C++ chuẩn của sự vật, vì mục đích linh hoạt. Nhưng tôi nghĩ rằng đây là một quyết định chủ quan hơn, vì các loại thường khá dễ dàng để chuyển đổi từ nhau (và các thùng chứa Qt cũng cung cấp các trình vòng lặp phù hợp tiêu chuẩn). Mặc dù trong mã trung tâm Qt cao, các thùng chứa Qt có thể hoạt động tốt hơn, đặc biệt cùng với hệ thống kiểu và đối tượng meta của Qt.

1

Tôi cho rằng đó là tùy thuộc vào quyết định của bạn. Hãy xem xét việc chuyển đổi giữa hai yêu cầu một bản sao của chuỗi, vì vậy nếu sử dụng cả hai yêu cầu chuyển đổi, thì nó không tốt về hiệu suất: đọc ví dụ QString::fromStdStringQString::fromStdWString. Nếu bạn đang sử dụng Qt tôi đoán bạn có thể đang sử dụng không chỉ QString, và trong trường hợp này hầu hết các phương pháp của các lớp Qt yêu cầu bạn cung cấp QString's. Vì vậy, có thể là xấu cho hiệu suất và không thoải mái để viết.

Hãy xem xét thêm rằng std :: string thay đổi đôi chút từ triển khai sang triển khai và std :: chuỗi sao chép trên ghi có thể hiển thị hiệu suất khác nhau.

+0

Liên kết của bạn bị hỏng. –

3

Chuỗi QStrings và C++ giải quyết các vấn đề khác nhau - khác biệt chính là QStrings xử lý ngôn ngữ/mã hóa một cách rõ ràng, trong khi std :: strings thì không.

để sử dụng QStrings cho tất cả dữ liệu được người dùng nhập và tất cả các chuỗi sẽ được hiển thị cho người dùng của bạn hoặc bạn có nguy cơ mất thông tin trong mã hóa chuyển đổi và/hoặc làm cho việc quốc tế hóa ứng dụng của bạn trở nên khó khăn hơn trong tương lai.

Đối với bất kỳ thứ gì tôi chỉ cần một ký tự tương đương *, ví dụ: giữ dữ liệu đọc từ cơ sở dữ liệu nơi ngôn ngữ/mã hóa không áp dụng được, tôi sử dụng chuỗi std :: vì chúng dễ sử dụng hơn với thư viện không phải Qt và dữ liệu của bạn không được đặt qua bất kỳ chuyển đổi mã hóa nào. Tuy nhiên, bạn phải thêm chúng một cách rõ ràng vào hệ thống loại qt để có thể sử dụng chúng trong các đối số tín hiệu/khe, điều này rất dễ dàng khi bạn biết cách thực hiện. Tuy nhiên, cuối cùng nó là một cuộc gọi phán xét - chỉ để làm cho codebase của bạn dễ tiếp cận hơn đối với người mới, có thể tốt hơn là chỉ sử dụng QString ở mọi nơi, hoặc có thể chỉ std :: string ở khắp mọi nơi nếu bạn đang sử dụng QtCore trong một ứng dụng -gui.

5

Kiểm tra điều này blog post so sánh STL với QTL và std::string đến QString.

My 2 cents

Nó thực sự phụ thuộc vào những gì bạn đang làm. Nói chung khi tôi đang mã hóa một cái gì đó, nơi Qt là không cần thiết (ví dụ như một thư viện), tôi luôn luôn sử dụng STL. Mặt khác, nếu tôi viết mã cho ứng dụng GUI, tôi thích sử dụng QTL và và QString trên STLstd::string. Nếu tôi muốn tích hợp mã này với thư viện được viết bằng cách sử dụng STL Tôi cung cấp chức năng quá tải để thực hiện chuyển đổi từ STL thành QTLQString đến std::string.

QStrings là phải Nếu bạn muốn bản địa hóa ứng dụng của mình kể từ khi sử dụng tr()QLinguist làm cho nó dễ dàng chết.