Vì vậy, tôi có một loạt các chức năng toàn cầu, nói:Làm thế nào để tạo một hàm 'passthru' trong C++ bằng cách sử dụng macro hoặc lập trình meta?
foo_f1(int a, int b, char *c);
foo_f2(int a);
foo_f3(char *a);
Tôi muốn thực hiện một C++ bao bọc xung quanh đó, một cái gì đó như:
MyFoo::f1(int a, int b, char* c);
MyFoo::f2(int a);
MyFoo::f3(char* a);
Có khoảng 40 chức năng như thế này, 35 trong số họ Tôi chỉ muốn chuyển sang chức năng toàn cầu, 5 người còn lại tôi muốn làm điều gì đó khác biệt.
Lý tưởng nhất là việc thực hiện các MyFoo.cpp sẽ là một cái gì đó như:
PASSTHRU(f1, (int a, int b, char *c));
PASSTHRU(f2, (int a));
MyFoo::f3(char *a)
{
//do my own thing here
}
Nhưng tôi đang gặp khó khăn để tìm ra một cách thanh lịch để làm cho vĩ mô passthru trên.
Những gì tôi thực sự cần là một cái gì đó giống như getArgs X huyền thoại() dưới đây:
MyFoo::f1(int a, int b, char *c)
{
X args = getArgs();
args++; //skip past implicit this..
::f1(args); //pass args to global function
}
Nhưng ngắn rơi vào lắp ráp tôi không thể tìm thấy một thực hiện tốt getArgs().
Đối với hầu hết các phần, điều này là không thể với phiên bản C++ hiện tại. Nếu bạn Google "chuyển tiếp hoàn hảo", bạn sẽ nhận được nhiều lượt truy cập về lý do tại sao tính năng này hiện không hoạt động và những gì C++ 0x bổ sung để giúp giải quyết vấn đề. –
Mục đích là làm cho hàm toàn cầu trở thành thành viên của một lớp, đặc biệt khi bạn cố gắng bỏ qua 'điều này'? – GManNickG