如何使运算符具有显式参数 C++

how to make a operator have an explicit parameter c++

本文关键字:参数 C++ 何使 运算符      更新时间:2023-10-16

考虑一些代码:

void foo() { }
bool bar() { return true; }
struct S
{
    void operator=(std::function<void()> f){f();};
    void operator=(std::function<bool()> f){f();};      
};
int main() {
    S s;
    s = foo; // ok
    s = bar; // error: use of overloaded operator '=' is ambiguous
}    

如何使此示例明确?

您遇到的问题是允许std::function<void(Args...)>丢弃返回类型 - 因此std::function<void()>std::function<bool()>都可以从bool(*)()构造。后者将通过bar的返回转发,但前者只会丢弃它。这是完全有效的行为,但会导致这不明确。

您可能想要的是完全避免std::function

template <class F>
void operator=(F f) { f(); }