tôi sẽ cố gắng giải thích những gì tôi đang cố gắng để làm:Làm thế nào để biết liệu hàm hiện tại có phải là một hàm thành viên thông thường hay một hàm tĩnh trong C++ 11?
bool if_filter_applies() {return true;}
#defile LOGFILE if(if_filter_applies()) LOG_STREAM_OBJECT
void globalFunc() { LOGFILE << "Some data \n"; }
class C {
int a;
bool if_filter_applies() {
if (a == 1)
return true;
else
return false;
}
public:
void regMem() {
LOGFILE << "Some data\n";
}
static void staticMem() {
LOGFILE << "Some data\n";
}
};
Tôi đang cố gắng để sửa đổi một định nghĩa logfile để nó chỉ ghi vào một dòng khi được sử dụng từ bên trong hàm thành viên của một lớp dựa trên đầu ra của hàm thành viên if_filter_applies()
.
Nếu LOGFILE được sử dụng từ bên ngoài lớp hoặc trong một hàm thành viên tĩnh, tôi muốn nó sử dụng hàm Global if_filter_applies()
(luôn trả về true).
Mã trên không biên dịch, vì static void staticMem()
kết thúc bằng cách sử dụng thành viên lớp if_filter_applies()
thay vì toàn cầu.
Tôi không muốn tạo một định nghĩa khác tương tự như #define LOGFILE
làm thay thế riêng cho các hàm thành viên tĩnh, vì có hàng trăm tệp trong mã của chúng tôi và tôi không muốn thay thế tất cả các lần xuất hiện theo cách thủ công.
Vì vậy, có bất kỳ thay đổi nào tôi có thể thực hiện cho #defile LOGFILE
macro sao cho nó gọi số ::if_filter_applies()
thay vì trong ngữ cảnh của hàm thành viên tĩnh?
Hãy xem [this] (http://stackoverflow.com/questions/25863485/is-it-possible-to-bring-global-function-into-the-overload- giải quyết-với-thành viên? lq = 1) (có tôi cũng thất vọng) –
Tại sao bạn muốn ** # defile ** LOGFILE của bạn: ( –
Nó không thực sự là một tập tin đăng nhập cho trường hợp sử dụng của tôi, nó thực sự là một bộ đệm tròn Tôi chỉ thực hiện LOGFILE lên để giải thích vấn đề của tôi. :) – SidR