Với tính năng sắp tới C++ 17 của non-type template arguments with auto, nó sẽ có thể để thực hiện std::function
trong một cách nào đó để có thể đặt, ví dụ, các chức năng sau:Đối số mẫu C++ 17 có tính năng tự động cho phép std :: đối tượng hàm bị hạn chế không?
bool f(int n, double d) {}
bool g(bool b, char c) {}
bool h(bool b) {}
vào auto-templated std::function
các đối tượng:
std::function<bool(auto, auto)> faa = f; // ok
std::function<bool(int, auto)> fia = f; // ok
std::function<bool(double, auto)> fda = f; // error: function type mismatch
std::function<bool(auto, auto)> gaa = g; // ok
std::function<bool(auto, auto)> haa = h; // error: function type mismatch
std::function<bool(auto)> ha = h; // ok
Và cứ tiếp tục như vậy.
Nói cách khác, để có các đối tượng std::function
bị hạn chế về các loại chức năng mà chúng chấp nhận?
(Hiện nay, trên GCC chúng tôi nhận được một error: 'auto' parameter not permitted in this context
.)
Làm thế nào bạn sẽ gọi một hàm 'std ::', giả định một điều như vậy tồn tại? –
@ n.m .: Rất, rất cẩn thận. –
@LightnessRacesinOrbit như trái ngược với các cuộc gọi cẩu thả thông thường của các hàm trước C++ 17? –