【问题标题】:C++ how to overload operators for member variablesC++如何为成员变量重载运算符
【发布时间】:2016-04-23 21:08:28
【问题描述】:

如果我有一个结构:

typedef struct Foo
{
    std::function<bool()> func;
}Foo;

我有一个 void 函数

void bar(){std::cout << "hey";}

我希望能够做到这一点:

Foo f;
f.func = bar // f.func == func(){std::cout << "hey"; return true;}

【问题讨论】:

  • 在 C++ 中不需要 typedef struct X {} X 废话。写struct X {}
  • 如果你用谷歌搜索 C++ 成员变量的重载运算符,你会得到答案。您应该自己做一些工作,只有在尽职调查后您仍然感到困惑时,请在此处询问。

标签: c++ operator-overloading std-function


【解决方案1】:

首先是void bar() {}的函数类型是void()而不是bool(),所以func应该是:

std::function<void()> func;

第二件事:不清楚“C++ 如何为成员变量重载运算符”是什么意思。如果你想让你的代码编译,那么上面的改变就足够了。如果你想调用f();,你可以重载的操作符是void operator()() { func(); }

如果您想保留 bool() 函数类型并且仍然能够调用 void() 函数,那么您可以使用 lambda,它会调用 bar 并返回 true:

f.func = [](){ bar(); return true;};

【讨论】:

  • 最后一行的注释表明他希望分配导致f.func 存储bar 的修改版本,在执行bar 通常所做的操作之后,返回true。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多