c++ - 有没有办法重载 operator= 以对右侧的函数具有特定行为

标签 c++ operator-overloading

我有一个名为 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/

相关文章:

c++ - 运算符重载如何在 cpp 中进行排序?

gcc - GCC 中向量类型 __m128、__m256 的重载冲突

c++ - "screwing up"赋值运算符会产生什么后果?

c++ - 错误 : Compiler limit Heap limit reached on simple hello world program

c++ - cout是在iostream中声明的,但是在哪里定义的呢?

c++ - 我可以让虚拟抽象类抛出异常吗

c++ - 如何使用静态成员函数创建一个矩阵,然后可以使用运算符重载打印该矩阵?

c++ - 如何使用 opencv 2.4.9 在 ORB 中获得高效的结果?

c++ - 获取“段错误 : core dumped when trying to write string to setter

c++ - 2 个不同对象的交换运算符重载 +