Nếu tôi có khai báo kiểu nhưC++ template tiếng gọi của chức năng con trỏ kiểu
typedef void (*command)();
template <command c>
void execute() {
c();
}
void task() { /* some piece of code */ }
sau đó
execute<task>();
sẽ biên dịch và hoạt động như mong đợi. Tuy nhiên, nếu tôi xác định mẫu là
template <command c>
void execute() {
command();
}
nó vẫn biên dịch. Tôi đã làm điều này một cách tình cờ. Bây giờ tôi đang bối rối về những gì phiên bản thứ hai sẽ được dự kiến sẽ làm.
'command();' tạo đối tượng tạm thời của hàm * pointer * type được định nghĩa bởi 'typedef'. – Nawaz
Có gì sai khi gọi 'execute (command)' ;? Tại sao bạn muốn sử dụng một mẫu lai như vậy? –
Đây là một ví dụ bị tước. Điều tôi thực sự làm là ở đây: http://stackoverflow.com/a/19611077/2036917 Vấn đề là template cho phép tôi có các biến tĩnh khác nhau. Tôi biết rằng tôi có thể đạt được điều tương tự với các vật thể phù hợp. Nhưng sau đó một lần nữa nhớ rằng một Arduino chỉ có 2K RAM. Vì vậy, phương pháp tiếp cận làm giảm lượng bộ nhớ một chút. –