tôi có mã này:Visual Studio 2010 và std :: chức năng
#include <iostream>
#include <functional>
struct A
{
int operator()(int i) const {
std::cout << "F: " << i << std::endl;
return i + 1;
}
};
int main()
{
A a;
std::tr1::function<int(int)> f = std::tr1::ref(a);
std::cout << f(6) << std::endl;
}
Mục đích là để vượt qua các đối tượng functor bởi một reference_wrapper, trong một cách để tránh các cuộc gọi bản sao costructor vô dụng. tôi mong đợi đầu ra sau đây:
F: 6
7
Nó hoạt động một cách chính xác với GCC> = 4.4.0, Visual Studio 2008 và với đẩy mạnh bằng cách thay namespace std :: tr1 với đẩy mạnh. Nó chỉ không hoạt động với Visual Studio 2010 mới cả Express Beta 2 và Release Candidate.
Tính năng C++ mới này có bị lỗi trong vs2010 không? Hoặc có một số sai lầm hoặc lạm dụng trong mã?
Làm thế nào nó không hoạt động? – UncleBens
@ litb: Tôi nghĩ rằng OP có vấn đề với việc sử dụng lớp 'std :: tr1 :: ref' và * không * tăng trên VS2010. – dirkgently
Đây là việc xây dựng sản phẩm của VS2010: http://pastebin.com/YQf4Qe8W –