cuốn sách gpt4 ai đã làm

Nơi đặt các lệnh sử dụng trong tệp tiêu đề C++

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:09:22 25 4
mua khóa gpt4 Nike

Đối với dự án của tôi, tôi đang sử dụng một số cấu trúc dữ liệu rất phức tạp như

std::unordered_map<>>>

Để dễ đọc, tôi muốn khai báo bí danh loại cho nó. Mã xây dựng dự án của tôi đã được đặt chung trong tệp tiêu đề bởi using tuyên bố để làm điều này:

//bar.h
#ifndef BAR_H
#xác định BAR_H

#include
#include
#include
#include "foo.h"

sử dụng FooTable = std::unordered_map<>>>;

thanh lớp {
FooTable create_foo();
};

#endif

Vì kiến ​​thức C++ của tôi hơi yếu nên tôi chỉ làm theo phong cách này - nhưng bây giờ tôi đọc nó bằng cách sử dụng using Có thể có vấn đề vì nó sẽ buộc tiêu đề bí danh này lên mọi thứ có chứa nó.

Mặc dù tìm kiếm trên Google rất nhiều nhưng tôi không thể tìm thấy câu trả lời cụ thể về cách xử lý vấn đề này đúng cách, chỉ có rất nhiều tuyên bố về những điều không nên làm. Vì vậy, tôi chỉ đưa cách sử dụng vào lớp:

//bar.h
#ifndef BAR_H
#xác định BAR_H

#include
#include
#include
#include "foo.h"


thanh lớp {
sử dụng FooTable = std::unordered_map<>>>;

FooTable create_foo();
};

#endif

Nhưng điều này có nhược điểm là tôi cần nhắc lại bí danh trong file nguồn:

//bar.cpp
#include "bar.h"

sử dụng FooTable = std::unordered_map<>>>;

Thanh FooTable::create_foo()
{
...
}

Mặc dù cách này có vẻ hiệu quả nhưng tôi không chắc liệu nó có an toàn hay không...linh cảm của tôi mách bảo rằng nó hơi xấu. Vì vậy, trước khi viết lại toàn bộ dự án của mình như thế này, tôi nghĩ tôi sẽ hỏi: có cách nào tốt hơn/thanh lịch hơn/an toàn hơn để thực hiện việc này không? Hoặc tôi nên tránh sử dụng hoàn toàn các bí danh loại trong tệp tiêu đề?

câu trả lời hay nhất

Tuy nhiên, điều này có một nhược điểm là tôi cần đặt lại bí danh trong tệp nguồn:

Điều này không đúng. Bạn chỉ cần thiết lập nó thành công cộng Sau đó chỉ định phạm vi thích hợp để bạn có thể Thanh Gọi nó ngoài phạm vi của Thanh::Bàn chân (Điều này bao gồm kiểu trả về, trừ khi có dấu sau!):

Thanh::Thanh FooTable::create_foo()
{ /* ... */ }

hoặc

thanh tự động::create_foo() -> FooTable
{ /* ... */ }

(chỉ một Bàn chân rất tốthiện hữutrong định nghĩa, vì nó là thành viên!)

Cách tiếp cận của bạn ổn, nhưng tôi cũng sẽ đặt mọi thứ vào một không gian tên. Sau đó, sẽ không có vấn đề gì nếu bí danh của bạn thuộc một lớp: nó vẫn độc lập với mã của riêng bạn. Đây hoàn toàn là vấn đề về phong cách và ít ảnh hưởng đến bất kỳ ai khác.

Về c++ - nơi đặt các lệnh sử dụng trong tệp tiêu đề 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/57756881/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress