c++标准类型扩展
C++ standard types extension
如果我想添加计算绝对/相对误差的功能,我能做些什么?我可以简单地实现MyDouble类,它涵盖了所有的double函数,可以执行这个特定的操作,然后用这个类型"替换"double吗?
我想这样使用它:
-
写一些通常使用double类型的代码
-
在我的文件开头添加一些头文件,或者写一些像
typedef double MyDouble
-
估计双值的误差,在我的代码中积累
类型定义不足以拥有您自己的类。如果需要累积错误、重载某些操作或定义额外的成员,则肯定需要一个成员来保存它们,还需要重载操作来定义错误传播规则。
开头:
class MyCDouble {
double d;
public:
MyCDouble(double x) : d(x) {}
operator double() const { return d; }
void analyze() {};
};
由于转换操作符和构造函数,可以像使用double类型一样使用该类。例如:
MyCDouble d = 3.14;
MyCDouble e = sqrt(d);
e.analyze();
cout << "sqrt of "<<d<<" is "<< e<<endl;
e = (d + 5)/3;
现在,由您来添加错误管理和重载所需的内容。例如,您可以添加私有成员double error;
,并重载传播错误的操作。例如,在类中可以添加:
MyCDouble operator+ (MyCDouble x) {
MyCDouble r = d+x;
r.error = max(r.error, x.error);
return r;
}
相关文章:
- 扩展C++生成的代码的模板参数类型名称
- 将元组类型扩展为可变参数模板?
- 可变参数模板参数扩展 类型为 std::function 的类成员
- 将"模板<类型名 T>zero()"扩展/专用为可调用的"T"
- Visual Studio Code "variable " u8 的 C/C++ 扩展名 " " 不是类型名称"
- 将可变参数类型列表的扩展打包为复杂类型的初始值设定项列表 - 合法吗?
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 如何在 CMake 中"override"文件的按扩展名类型
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 扩展自定义类型的spdlog
- c++非类型参数包扩展
- CMake:什么是可能的目标源类型?它们可以扩展吗
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- 针对特殊情况,使用其他状态信息扩展基元类型
- RXCPP:创建一个不关心可观察量输入类型的扩展
- 使用子类中的类型定义扩展模板类
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- C++中的可扩展类型特征
- 在 C++ 中具有用户可扩展类型参数的类型化类
- Cython扩展类型属性误解