Tôi đang cố gắng để xác định một phương pháp học cho các bản in debug mà sẽ hành xử giống như printf
:Làm thế nào tôi nên sử dụng đúng __attribute__ ((định dạng (printf, x, y))) bên trong một phương thức lớp trong C++?
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))
này phàn nàn về:
error: format string argument not a string type
Tôi nhắc lại rằng một tuyên bố phương pháp lớp học có một tham số ngầm this
, vì vậy tôi đã thay đổi vị trí của các tham số thành 2, 3:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))
và bây giờ nó biên dịch, nhưng có vẻ như các tham số được dịch chuyển, như thể tham số this
đã được xử lý như một phần của danh sách đối số.
Làm cách nào để biết hàm this
không phải là một phần của chuỗi mà tôi muốn in?
Bạn có thể sử dụng các mẫu variadic không? Nếu có, bạn có thể tạo [printf print an toàn] (http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html) – chris
Đừng suy nghĩ quá nhiều về 'this'. Nó không phải là một đối số rõ ràng, thời gian. Chỉ cần làm theo hướng dẫn GCC, cho biết rằng đối với các hàm thành viên, bạn phải thêm 1 vào các đối số thuộc tính 'format'. Nó chỉ là một quy tắc mờ đục, được cung cấp bởi bạn bởi nhà cung cấp phần mở rộng của trình biên dịch. –
printf (2, 3) là đúng. Xác định "có vẻ như bị dịch chuyển" ...? –