Nói rằng tôi có 3 chức năng khác nhau mà tôi có thể muốn để trỏ đến:Sử dụng std :: chức năng như một đại biểu trong C++ 11
float test1(int a, int b) {
return 7.0f;
}
struct TestClass {
float test2(int a, int b) {
return 5.0f;
}
};
struct TestClass2 {
float test3(int a, int b) {
return 3.0f;
}
};
Thông báo như thế nào cả ba sử dụng các đối số tương tự và trở về giá trị. Tôi muốn trừu tượng liệu nó có phải là một hàm thành viên hay không và nó thuộc về lớp nào. Tôi muốn một loại đại biểu có thể được đề cập đến bất kỳ của 3 chức năng này chỉ phụ thuộc vào cách nó được khởi tạo.
Đây là nỗ lực đầu tiên của tôi:
typedef std::function<float(int, int)> MyDelegate; // is this right?
int main() {
TestClass obj;
TestClass2 obj2;
MyDelegate a = test1;
MyDelegate b = std::bind(std::mem_fn(&TestClass::test2), obj); // is this right?
MyDelegate c = std::bind(std::mem_fn(&TestClass2::test3), obj2); // is this right?
return 0;
}
Ý tưởng là tôi muốn cũng để lưu trữ các 'này' con trỏ bên trong wrapper quá. Bằng cách này, nó giống như một ví dụ delegate.For đầy đủ chức năng, gọi 'b (x, y)' nên giống như gọi obj.test2(x, y)
.
Tôi thậm chí không thể làm cho nó biên dịch, tôi có lẽ không hoàn toàn nắm bắt điều này. Tôi là loại mới cho các thư viện và các lỗi trong VS2012 là thảm họa vô ích. Bất kỳ trợ giúp sẽ được đánh giá cao.
có thể trùng lặp của [callback kiểu C++ 11?] (Http://stackoverflow.com/questions/12338695/c11-styled-callbacks) – Klaim