使用friend operator idiom:
struct Foo {
friend Foo operator+(Foo, Foo) { return {}; }
};
// which is synonymous to the slightly less pretty:
struct Bar {
friend Bar operator+(Bar, Bar); // optional
};
inline Bar operator+(Bar, Bar) { return {}; }
我基本上想要operator+
的{{1}}的函数指针。
Foo
我可以说以下内容:
Bar
但是,如果我对auto fn = static_cast<Bar (*)(Bar, Bar)>(&operator+);
fn({},{});
版本执行相同操作,g ++和clang ++会通知我:
Foo
这本质上是不可能的,还是有办法参考这个功能?
答案 0 :(得分:2)
如果友元函数仅在类定义中声明,则通过限定或非限定查找无法找到它,只能通过参数依赖查找。这意味着您可以调用该函数,但不能获取其地址。
如果你想获取地址,那么你也需要在周围的命名空间中声明它。
或者,您可以使用lambda而不是old-school函数指针:
auto f = [](Foo f1, Foo f2){return f1+f2;}