xem xét mã đơn giản và vô nghĩa này.C++ functor và các mẫu chức năng
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
Đây là ví dụ rất đơn giản về mẫu chức năng. Điều gì sẽ xảy ra nếu tôi muốn thay thế A::test
với quá tải operator()
để biến nó thành một hàm functor?
#include <iostream>
struct A {
template<int N>
void operator()() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a<1>(); // <-- error, how do I do this?
}
Chắc chắn nếu tham số operator()
lấy tham số phụ thuộc vào mẫu, trình biên dịch có thể suy ra mẫu. Nhưng tôi chỉ không thể tìm ra cú pháp thích hợp để xác định các tham số mẫu với một hàm functor không tham số.
Có cách nào phù hợp để thực hiện việc này không?
Rõ ràng, mã này sẽ làm việc kể từ khi nó đi qua các cú pháp functor:
a.operator()<1>();
nhưng mà kinda đánh bại mục đích của nó là một :-P functor.
+1: Cú pháp lạ để sử dụng trong mã-obfuscation. Nên được đề cập trong http://thc.org/root/phun/unmaintain.html :-) –