Tôi đang cố gắng sử dụng các macro __FILE__
và __LINE__
trong một hàm tạo làm thông số mặc định, nhưng dường như tôi không thể sử dụng các macro để sử dụng đúng tệp. Chúng tiếp tục mở rộng từ tệp tiêu đề của tôi.Làm cách nào để sử dụng __FILE__ và __LINE__ làm tham số mặc định trong hàm dựng trong C++?
Cụ thể hơn: Tôi muốn có tệp và số dòng từ nơi đối tượng được khởi tạo làm thành viên trong lớp của tôi. Nhưng tôi không muốn phải đi và đặt các thông số bằng tay mỗi khi tôi muốn sử dụng các vật thể. Tôi biết có một cách để làm điều này, nhưng tôi không thể cho cuộc sống của tôi con số nó ra. Những gì tôi hiện đang làm như sau:
Trong tập tin tiêu đề của tôi:
mnNumber(float x, const char* filename = __FILE__, int linenumber = __LINE__):
value(x), mFileName(filename), mFunctionName(nullptr), mLineNumber( linenumber), mID(0)
Nhưng, FILE và ĐƯỜNG DÂY được mở rộng như thể họ đang từ tập tin tiêu đề của tôi, không phải là thực tế vị trí tôi sử dụng mnNumber.
Để trả lời câu hỏi tại sao tôi muốn làm điều này, tôi muốn có mã đọc mã riêng của nó. Các giá trị cụ thể mà tôi sử dụng đang được đăng ký trong một người quản lý và giá trị của chúng được phép bởi người dùng cuối. Khi người dùng cuối được thực hiện chỉnh sửa giá trị, giá trị được ghi lại vào trang mã. Vì vậy, tôi cần biết giá trị xuất phát từ đâu. Tôi cũng cho phép người dùng cuối nói rằng họ sẽ không bao giờ cần chỉnh sửa lại giá trị này và khi họ nhấp vào nút đó, giá trị được chuyển đổi từ mnNumber trở lại thành phao và loại trên mã được viết lại dưới dạng phao . Hoặc, sẽ ... hy vọng.
Bạn có lời khuyên nào cho tôi không?
Câu trả lời ngắn: Bạn không thể sử dụng chúng theo cách bạn muốn. Chúng mở rộng tại vị trí mà mã nguồn của hàm tạo được viết, đó là cách mà trình tiền xử lý hoạt động. Đó là một công cụ xử lý văn bản mà không biết gì về "tham số chức năng" và các lượt thích. Trình biên dịch, thứ thực sự giao dịch với các hàm, đối số, vv xuất hiện sau khi bộ tiền xử lý kết thúc. – Xeo
Bạn cần sử dụng macro thay vì hàm tạo. Nó sẽ không hoạt động theo bất kỳ cách nào khác. Điều này có nghĩa là nó không hoàn toàn trên mã chung, ví dụ. –
Và người quản lý của tôi là một singleton? Giải pháp thông minh! – steffen