Tôi có một số lớp C
và muốn chuyển địa chỉ của cá thể và phương thức của nó cho một số hàm trong hàm kiểm tra Test_C_Foo1()
. Functor là một lớp mẫu và tôi phải cung cấp kiểu phương thức lớp (MEMFN1
) làm một trong các tham số mẫu của nó. Tôi phải xác định loại MEMFN1
ở đâu đó nhưng không muốn thay đổi C.h
và không muốn gây ô nhiễm không gian tên chung với nó. Tôi đã quyết định bản địa hóa typedef càng nhiều càng tốt để đặt nó bên trong chức năng kiểm tra - trong phạm vi nơi thực tế sử dụng MEMFN1
. Có sử dụng typedef bên trong cơ thể chức năng hay không?Là typedef bên trong của một cơ quan chức năng một thực hành lập trình xấu?
tiêu chuẩn cho phép sử dụng typedef bên trong một cơ quan chức năng, hạn chế nó chỉ trong những trường hợp đặc biệt:
Từ khoá typedef không được kết hợp trong một decl-specifier-seq với bất kỳ loại khác của specifier ngoại trừ một loại-specifier, và nó sẽ không được sử dụng trong khai báo-specifier-seq của khai báo tham số (8.3.5) và cũng không khai báo-specifier-seq của định nghĩa hàm (8.4).
Dưới đây là đoạn mã:
C.h:
...
#include <string>
...
class C
{
public:
int foo1(const std::string&);
};
main.cpp:
...
#include "C.h"
...
void Test_C_Foo1()
{
typedef int(C::*MEMFN1)(const std::string&);
C c;
Functor1<C, MEMFN1,...> f1(&c, &C1::foo1,...);
...
}
...
int main()
{
Test_C_Foo1();
return 0;
}
Nó chỉ là tốt. – Mat
Các bạn, cảm ơn các câu trả lời của bạn. Thu hẹp phạm vi của * typedef * trong trường hợp này dường như là sự lựa chọn tự nhiên đối với tôi và tôi đã nghi ngờ chỉ vì tôi không thể nhớ nếu tôi đã từng xem qua nó trong mã hay văn học. –
Bạn có thể sử dụng 'decltype' với C++ 11 không? –