如何在类/类型中添加更多函数来构建 int、double、std::string 等

How to add more functions to buildt in classes/types as int, double, std::string etc

本文关键字:int 构建 std string 函数 double 类型 添加      更新时间:2023-10-16

您可能知道数据类型std::string其中包含一些函数。例如std::string.substr() .我想知道,有没有办法向这些类型添加更多功能?例如:

int a = 42;
a.isLife(); // a function that returns true if a is 42

但是isLife()不存在吧?有没有办法添加它?

不,这在C++是不可能的。在C++中,你写的是isLife(a)

没有办法这样做。

基元类型是基元类型,它们没有可用的运算符.。基元类型不是类

您也不能将任何内容追加到定义的类中。一旦定义,它就完成了。否则,编译器将无法使用此类 - 如果有一个未更改类的使用,然后有人向此类添加一些内容并使用此类怎么办。现在使用哪个版本?

理论上,您可以像<string>一样编辑系统标题,但这是非常理论上的。它违反了标准,没有编译器支持它 AFAIK。

@SonicAsF,你不能/不应该。 @MSalters有正确的答案。这就是C++打算扩展类的方式。这就是为什么std::beginstd::endstd::swap是它们。这也是为什么依赖于参数("Koenig"(查找的工作方式:如果你在命名空间NS中有一个类C和一个函数void NS::f(const NS::C&),如果你有NS::C c;你可以调用f(c); unqualified 外部NS。在哲学上,C++认为fC界面的一部分。

目前这是不可能的。 您要么必须编写自己的行为类似于和int的类型,并提供isLife成员函数,要么提供采用int的免费函数isLife

有人提议有一个通用的调用语法,其中foo.bar()调用bar(foo)实际上是bar是一个自由的功能,但它被拒绝了。 可能会出现其他问题,或者您可以尝试提出自己的建议。


请注意,将成员函数添加到标准库类型也是非法的(根据标准(。 您可以添加免费函数,但不允许修改实现。