Tôi đang viết một hàm C + 11, có thể gọi là đối số và tôi muốn đặt đối số đó thành mặc định cho hàm không có chức năng. Đây là nỗ lực hết sức mình cho đến nay:C++ 11 lambdas làm đối số hàm mặc định
const std::function<void()> noop= [](){};
void f(int x, int y, std::function<void()> fn= noop) { /* ... */ }
Tôi đang tự hỏi liệu các thư viện chuẩn cung cấp một "noop" chức năng std đối với tôi, hay tôi cần phải viết riêng của tôi như là tôi đã ở trên? Tôi cũng tự hỏi nếu có một cách để tránh đặt tên rõ ràng chức năng "noop". Ví dụ:
void f(int x, int y, std::function<void()> fn= [](){}) { /* ... */ }
sẽ không biên dịch (trong Visual Studio 2012 Update 3), cũng không phải sẽ:
void f(int x, int y, std::function<void()> fn= std::function<void()>([](){})) { /* ... */ }
+1: Câu hỏi hay, nhưng còn về việc sửa lỗi nhỏ này thì sao? 'void f (int x, int y) {f (x, y, []() {}); } '(trong đó' void f (int, int, std :: function) 'là hàm ban đầu của bạn không có tham số tùy chọn) –
Zeta
Hoạt động trong g ++ 4.7.2 BTW. –
Bạn không nên đặt 'noop' thành' std :: function', làm cho nó 'auto noop = [] {};'. Tôi nghi ngờ VS2012 là sai ở đây. Và noop kinh điển là '[] {}' - save '()'! Hoặc '<:]{%>' (cái nanh chú hề) để giải trí tối đa. – Yakk