当前位置: 首页 > 知识库问答 >
问题:

如何使运算符具有显式参数c[重复]

闻人河
2023-03-14

考虑一些代码:

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
}    

我怎样才能使这个例子明确?

共有1个答案

孟安民
2023-03-14

您遇到的问题是<code>std::函数

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

template <class F>
void operator=(F f) { f(); }
 类似资料:
  • 四则运算符(+、-、*、/、+=、-=、*=、/=)和关系运算符(>、<、<=、>=、==、!=)都是数学运算符,它们在实际开发中非常常见,被重载的几率也很高,并且有着相似的重载格式。本节以复数类 Complex 为例对它们进行重载,重在演示运算符重载的语法以及规范。 复数能够进行完整的四则运算,但不能进行完整的关系运算:我们只能判断两个复数是否相等,但不能比较它们的大小,所以不能对 >、<、<=

  • 主要内容:运算符重载的实现,可重载与不可重载的运算符C# 中支持运算符重载,所谓运算符重载就是我们可以使用自定义类型来重新定义 C# 中大多数运算符的功能。运算符重载需要通过 operator 关键字后跟运算符的形式来定义的,我们可以将被重新定义的运算符看作是具有特殊名称的函数,与其他函数一样,该函数也有返回值类型和参数列表,如下例所示: public static Box operator+ (Box b, Box c) {     Box bo

  • 本文向大家介绍c++ *运算符重载,包括了c++ *运算符重载的使用技巧和注意事项,需要的朋友参考一下 运算符重载,对象和指向对象的指针 直接上code 运行结果: t是指向test对象的指针,(*t) 也就是一个test对象。 所以只有 *t才真正的调用了 运算符的重载函数。

  • 我试图重载结构中映射的运算符<<,但得到一个编译错误: 不存在从“std::_rb_tree_const_iterator >”到“std::_rb_tree_iterator >”的合适的用户定义转换

  • 对于一个作业,学生们必须制作一个卡片结构来保存卡片的花色、等级和位图。此结构需要一个重载的" 然而,操作员 事先非常感谢。

  • 结果是真是假 我不知道我的运算符重载有什么问题?(mc2应该小于mc1) 我不确定在BST中搜索“MyClass”节点是否正确?结果是“未找到”......我将其追踪到“BST. cpp”,发现问题也出现在“if(项目 谁能帮我或者给我一个提示......非常感谢!