我有一个名为 Image
的类,我希望非成员函数返回到 Image
中。
Image::Image(const char * src);
Image::Image& operator= (const Image& p);
Image requestImg(std::string filename); //not a member function
我是这样使用它的:
Image p = requestImg("grass.png");
这很好,但是 - 我希望能够让 requestImg
生成一个线程,将图像加载到 Image
对象 (p) 中,同时修改它对象的状态为 loading=true
。
换句话说。
Image p = requestImg("grass.png"); //image is loading
std::cout << p.loading << std::endl; //true
//some time passes
std::cout << p.loading << std::endl; //false
p
最初不能将 loading 设置为 true,因为它不会加载并且不会导致合理的命名。我意识到使用成员函数会更容易,甚至可以将指针传递给该函数,但是有什么方法可以按照我列出的那样执行此操作吗?
最佳答案
可以离开Image
按原样使用 std::async
,这会给你一个 std::future<Image>
.您可以决定何时需要结果:
#include <future>
auto p = std::async(std::launch::async, &requestImg,"grass.png"); // load image asynchronously
//some time passes
// do other work
// now we really need the image
auto img = p.get(); // blocking call, requires async call to be done loading image.
关于c++ - 有没有办法重载 operator= 以对右侧的函数具有特定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16515625/