如何在类/类型中添加更多函数来构建 int、double、std::string 等
How to add more functions to buildt in classes/types as int, double, std::string etc
您可能知道数据类型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::begin
、std::end
和std::swap
是它们。这也是为什么依赖于参数("Koenig"(查找的工作方式:如果你在命名空间NS
中有一个类C
和一个函数void NS::f(const NS::C&)
,如果你有NS::C c;
你可以调用f(c);
unqualified 外部NS
。在哲学上,C++认为f
是C
界面的一部分。
目前这是不可能的。 您要么必须编写自己的行为类似于和int
的类型,并提供isLife
成员函数,要么提供采用int
的免费函数isLife
有人提议有一个通用的调用语法,其中foo.bar()
调用bar(foo)
实际上是bar
是一个自由的功能,但它被拒绝了。 可能会出现其他问题,或者您可以尝试提出自己的建议。
请注意,将成员函数添加到标准库类型也是非法的(根据标准(。 您可以添加免费函数,但不允许修改实现。
- 为什么在全局范围内使用"extern int a"似乎不行?
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- int(c) 和 c-'0' 之间的区别。C++
- 如何使用ndk-build.cmd构建Android.so文件
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 如何在类/类型中添加更多函数来构建 int、double、std::string 等
- 在c#中构建一个int数组,每个int调用c++或在c++中构建并传递给c#
- 构建<int>大尺寸向量
- xcode 构建错误:从指针到较小类型"int"的语义问题丢失了信息