operator-overloading 相关问题

运算符重载是编程语言的一个特性,它允许运算符的自定义实现,具体取决于所涉及的操作数的类型。有些语言允许定义新的运算符,而其他语言只允许重新定义现有的运算符。

如何超载<<opeartor(double const&) in an inherited std::stringstream

我想覆盖 < 我想覆盖 <<opeartor 这样 double d = 3.0; mycustomstringstream << "Hello World " << d << "what a nice day."; std::cout << mystream.str() << std::endl; 将产生监视器输出 Hello World (double)(3.00000000000)what a nice day. 我尝试了什么 压倒一切 因为我可以像这样打印双打,所以我大胆地实现了: std::ostream& operator<<(std::ostream& o, double const& d){ o<<"(double)("<< d << ")"; return o; } 这不起作用,因为编译器会解释歧义(因为该运算符已经定义)。 继承 就像一开始一样,我可以从 std::stringstream 继承,只需替换我的自定义字符串流的该运算符的定义即可: #include<sstream> class MyCustomStringStream: public std::stringstream{}; MyCustomStringStream& operator<<(MyCustomStringStream& o, double const& d){ o<<"(double)("<< ( (std::stringstream)(o) << d ) << ")"; return o; } 这里的错误是: error: use of deleted function 'std::__cxx11::basic_stringstream<_CharT, _Traits, _Alloc>::basic_stringstream(const std::__cxx11::basic_stringstream<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' 那么那么: #include <iostream> #include <sstream> class MyStringStream: public std::stringstream{ std::stringstream aux; public: MyStringStream& operator<<(double const& d){ aux.str() = ""; aux << std::scientific << "((double)(" << d << ")"; *this << aux.str(); return *this; } }; int main() { double d = 12.3; MyStringStream s; s << "Hello World " << d << "what a nice day."; std::cout << s.str() << std::endl; } 但这仍然印着我 Hello World 12.3what a nice day. 演示[ https://godbolt.org/z/daG3bo6hv ] 无论你怎么想,继承通常都不是问题。无论如何,我不会从流派生(通常不建议从 STL 类型继承,尽管流允许这样做)。 对于您的情况,有一个更可重用的解决方案,制作一个辅助格式化对象: #include <iostream> #include <sstream> template<typename type_t> struct as_scientific { type_t value; }; template<typename type_t> std::ostream& operator<<(std::ostream& os, const as_scientific<type_t>& scientific) { os << std::scientific << "((" << typeid(type_t).name() << ")(" << scientific.value << ")"; return os; } int main() { double d = 12.3; std::ostringstream s; s << "Hello World " << as_scientific{d} << "what a nice day."; std::cout << s.str() << "\n"; // or directly std::cout << as_scientific{d} << "\n"; }

回答 1 投票 0

如何在 Ada 中重载下标/子程序调用运算符

我们都知道并喜爱 Ada.Containers.Vectors。这是其用法的示例: 与 Ada.Text_IO; 与 Ada.Containers.Vectors; 程序示例是 使用 Ada.Text_IO; 包 Vectors_Integer 是 ...

回答 1 投票 0

C++ 中的对象如何找到右值引用(未命名值)? [重复]

我有一个名为 Matrix 的类。我想要重载运算符!返回矩阵的转置。 当主矩阵是一个未命名的对象时,我更喜欢使用它分配的内存来构造转置矩阵,

回答 1 投票 0

Python 中的多个运算符重载

我有 2 个带有 + 运算符重载的点类: Point2D 类: x = 0 y = 0 def __add__(self, __other: "Point2D"): 返回 Point2D(self.x + __other.x, self.y + __ot...

回答 1 投票 0

为什么拥有<< operator in a global namespace?

我有这段代码,但我不明白它是如何工作的: #包括 #包括 #包括 #包括 typedef std::pair elem...

回答 1 投票 0

如何解决字符串中“operator=”的歧义重载

我正在尝试创建一个可以隐式转换为各种不同类型(基元和自定义定义的类)的类。我希望能够转换为的类型之一是 std::...

回答 1 投票 0

+= python 中的 __setitem__ 运算符(添加方括号)

在以下语句中定义类行为: 我的对象[项目] = ... 我知道我需要定义 __setitem__ 方法。 我需要为以下语句定义什么方法: 我的_obj...

回答 3 投票 0

在模板结构体中重载结构体的运算符

我有一个模板结构 Foo,它定义了一个内部结构 Bar。 现在,我想重载流运算符 << for this inner struct Bar but the compiler seems to ignore my overload

回答 1 投票 0

重载元组索引运算符 - C++

如何重载 std::tuple 的索引 [] 运算符?因此,当我有 std::tuple tup 并输入 tup[0] 时,我希望它返回对 get<0>(tup) 的引用....

回答 2 投票 0

“多个运算符“!=”与这些操作数匹配”错误未停止编译?

所以我有一个模板类 TargetVar,它本质上只是另一个变量的包装器,这样我就可以为所述变量设置目标值以及达到该 v 需要多少帧...

回答 1 投票 0


如何在新类中重载fstream操作符? [重复]

我想包装一个新类来生成一个文件,并对新文件进行一些自动资源回收和一些额外的操作。 所以我开设了一个新课程,例如 类 TmpFile { 私人的: std::字符串

回答 1 投票 0

为什么我的类使用了错误的operator()?

考虑下面的 Foo 类,它提供了 2 个运算符 (),一个用于读取,另一个用于写入。 #包括 #包括 模板

回答 1 投票 0

如何在Delphi中重载记录分配运算符

我想制作使用动态数组的记录类型。 使用这种类型的变量 A 和 B,我希望能够执行操作 A:= B (和其他)并能够修改内容 o...

回答 2 投票 0

如果泛型类型具有这些运算符,如何重载泛型类上的运算符?

假设我有一个通用矩阵类型: 类矩阵 { 私有 T[,] _data; } 当且仅当 T 有一个重载的 + 运算符时,是否可以重载 Matrix 上的 + 运算符?

回答 1 投票 0

Clang-Tidy 不明确:operator++(int) 应该返回什么?

因此,我一直在为一项作业开发 Vector 实现,并在实现迭代器时注意到一些奇怪的 Clang-Tidy 建议。 迭代器必须有迭代器&运算符...

回答 1 投票 0

有没有办法覆盖 Rust 类型的赋值运算符? [重复]

我的问题如下:我想设置一个具有更有限值范围的类似原始结构。如在 #[repr(透明)] 结构 MyLimitedInt { 五:i8, } 但要确保 v 的值为

回答 1 投票 0

C++ 运算符的泛型重载<< for STL containers produces ambiguous overload error with strings

我的意思是编写一个通用的运算符重载<< to print STL containers. I put together code below. Whenever operator<< involves a string, it produces a compilation error ambiguous ove...

回答 1 投票 0

为什么这个运算符不能被继承?

我有以下代码: #包括 基类{ 民众: 虚空运算符()(int &x) = 0; 无效运算符()(int &&x){ 运算符()(x); } }; 班级

回答 1 投票 0

运算符重载不可与 flutter 中的操作数互换

我正在 flutter 中制作一个自定义数字类,并希望在该类与普通整数和双精度数之间进行基本算术运算。 所以我在类定义中重载了乘法运算符并且

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.