2011-10-27 46 views
5

Tôi đã duyệt qua một số câu hỏi ở đây và tôi đã tìm thấy một số mã mẫu được chuyển (giống như) một số nguyên được gán làm loại void làm tham số kiểu cho đối tượng được tạo khuôn mẫu. Dưới đây là ví dụ về ý tôi:Về tham số kiểu mẫu trong C++

SomeRandomObject<void(int)> Object; 

Tôi sẽ đánh giá cao nếu ai đó có thể giải thích phần "void (int)" của mã và những gì nó làm.

Trả lời

7

Loại đó là "chức năng mất int và trả lại void".

+0

Ok. Cảm ơn bạn vì sự giúp đỡ. –

2

Loại là loại chức năng. Bạn không có thể quá quen thuộc với nó, bởi vì cho đến bây giờ nó đã chỉ được sử dụng trong các loại con trỏ:

typedef int (ft)(void); // Huh? (raw function type) 
typedef ft *fp;   // ??? (pointer to function) 

typedef int (*fp_oldstyle)(void); // Ahh... (same as fp) 

Chức năng tự làm có các loại, nhưng kể từ khi bạn không thể khai báo các biến kiểu đó hoặc tham chiếu đến nó, chỉ điều bạn thường sử dụng là con trỏ, được khai báo trong cú pháp quen thuộc trên dòng cuối cùng. Đối với mọi chức năng int foo(void);, cả hai foo&foo được hiểu là con trỏ, do đó, loại chức năng "thô" ft là không cần thiết.

Tuy nhiên, với ma thuật mẫu mới xung quanh std::function, std::bind và lambdas, bây giờ điều phổ biến hơn để xem các loại chức năng trần truồng trong thông số mẫu.

+0

Có thể có tham chiếu hàm. – AraK

+0

@AraK: Ah, đó là sự thật: ft & f = foo; f() ;. Cảm ơn! Dường như không được sử dụng nhiều lắm; Tôi cho rằng trên tài khoản của các tài liệu tham khảo không được gán lại. –

+0

Tôi đồng ý, tôi hiếm khi thấy nó. Câu hỏi liên quan của tôi: http://stackoverflow.com/questions/1516958/could-someone-please-explain-the-difference-between-a-reference-and-a-pointer – AraK

Các vấn đề liên quan