在 C++ 中创建我自己的运算符

问题描述 投票:0回答:5

我知道可以重载 C++ 中已经存在的运算符来定义所需的行为,但是是否可以创建自己的运算符?

举个例子,创建一个返回容器大小的运算符

#

template<typename T>
size_t operator#(const T& obj) { return obj.size(); }

vector<int> v(1024);
cout << #v; // prints 1024
c++ operator-overloading
5个回答
9
投票

不。您需要坚持使用解析器已经知道如何处理的运算符。重载可以扩展表达式的含义,但是语法是固定的。


1
投票

不,这是不可能的。

无论如何,如果你将容器称为“定义”,会发生什么情况?


1
投票

您可以创建一个新类型(称之为

Foo
),然后创建一个
Bar::operator Foo()
,将
Bar
转换为
Foo

这可能不是您要找的。

您无法创建自己的

#
运算符。作为一个入门者,它在(已经非常臃肿的)C++ 优先级表中应该处于什么位置?它具有从左到右或从右到左的关联性吗?您将如何指定这些内容以及更多内容?

创建一个全新的操作符会带来很多问题,以至于语言根本不允许这样做。


0
投票

正如已经回答的那样,不!您只能重载所有已知的运算符,顺便说一句,您无法更改预定运算符的行为,那么您就无法更改运算符“+”的行为,例如,对于 int 数据类型。 ;)


0
投票

愿c++之神原谅我。

是的,不可能在 C++ 中创建自己的运算符。但是您可以创建一个行为类似于运算符的宏。为此,您可以为它们创建具有我们需要的优先级的辅助类型和重载运算符。接下来,您可以使用这个宏模板:

#define [my new operator] \
[overloaded operator] [auxiliary type] [overloaded operator] \

https://godbolt.org/z/zhr1MMc7n

(谦卑地忍受不喜欢的亵渎)))))))))

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