gpt4 book ai didi

c++ - 这里虚拟运算符 ()() 的目的是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:14 25 4
gpt4 key购买 nike

我正在尝试修改 code I found ,但我对这个虚拟运算符的目的、重要性和/或相关性缺乏了解而受阻:

  1. 有人可以提供有关此运算符为何必要或有用的见解吗?
  2. 我认为它以 parentItem()rect_resizer_ 作为参数,然后修改 的值是否正确? resizer_?

.h 中的构造函数:

virtual void operator()(QGraphicsItem* item, const QRectF& rect) = 0;

在.cpp中调用:

(*resizer_)(parentItem(), rect_);

构造函数的修剪上下文以供引用:

class SizeGripItem : public QGraphicsItem
{
private:

class HandleItem : public QGraphicsRectItem
{
public:
HandleItem(int positionFlags, SizeGripItem* parent);

private:
SizeGripItem* parent_;
};

public:
class Resizer
{
public:
virtual void operator()(QGraphicsItem* item,
const QRectF& rect) = 0;
};

SizeGripItem(Resizer* resizer = 0, QGraphicsItem* parent = 0);
virtual ~SizeGripItem();

private:
void doResize();
QRectF rect_;
Resizer* resizer_;
};

最佳答案

Resizerbroken尝试 polymorphic functor (功能对象)。这样的习惯用法在 C++11 之前很有用。它被破坏了,因为如果没有虚拟析构函数,这样的仿函数是无用的。它应该如下所示:

class Resizer {
public:
virtual void operator()(QGraphicsItem* item, const QRectF& rect) = 0;
virtual ~Resizer() {}
};

这样的对象是可调用的:

void invokeResizer(Resizer * resizer, QGraphicsItem * item, const QRectF & rect) {
(*resizer)(item, rect);
}

上面将执行方法operator()(QGraphicsItem*,const QRectF&)resizer 上对象。

在现代代码中,应该使用 std::function<void(QGraphicsItem*, const QRectF &)> 而不是这样的 hack .

关于c++ - 这里虚拟运算符 ()() 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com