我可以在C 中编程一个启动操作员吗?
Can I program an exponentiation operator in C++?
在数值编程中,我经常想在表达式内提出一个数字。这导致代码具有数百种pow(x,2)
或类似的事物。
这会使代码剪辑,并使它不可读取,也不太容易解析,尤其是在将书面方程与代码进行比较时。
我想在C 中写一个用于指示的操作员,如果这是可能的。
a^b == pow(a, b)
我尝试为operator()(double, double)
或operator[](double, double)
编写过载(选择它是因为它比(二进制(*
更紧密。但是我不能使它起作用。
是这样的事情吗?
也许预处理程序骗局?
类似的东西?
#include <iostream>
#include <cmath>
using namespace std;
class Exp {
public:
double val ;
Exp(double val) : val(val) {}
Exp operator^(const Exp &exp) {
return Exp(pow(val, exp.val));
}
operator double () {
return val;
}
};
ostream &operator << (ostream &out, const Exp &exp) {
out << exp.val;
return out;
}
int main(){
Exp a = 2;
Exp b = 3;
cout << (a + b) << ", " << (a ^ b) << endl;
return 0;
}
您可以定义自己的用户定义的文字,该字面返回了用呼叫操作员返回对象以执行指示,例如
中5.123_E(3)
这种方法的显而易见的缺点是它仅适用于文字值,即无a_E(b)
(尽管5.123_E(b)
会起作用(。
#include <iostream>
#include <cmath>
template < typename T >
class Exponential
{
T m_base;
public:
Exponential(T base) : m_base{base} {}
template < typename R >
decltype(auto) operator()(R exponent) { return std::pow(m_base,exponent); }
};
Exponential<long double> operator "" _E(long double base) { return Exponential<long double>{base}; }
int main()
{
std::cout << (5.123_E(3)) << std::endl;
}
相关文章:
- 如何创建一个空的全局类并在启动时实例化它
- 程序在使用 system() 启动另一个可执行文件时停止
- 为什么一个简单的程序不能立即启动
- 计时器是否从另一个线程启动?
- 在SFML(C++)中启动一个新窗口
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- 从另一个.cpp文件启动.cpp文件
- C++启动另一个程序(客户端-服务器)的程序
- 从另一个应用启动我的应用时出现相对路径更改问题
- 我可以在C 中编程一个启动操作员吗?
- osX - 如何从我的 QT 应用程序启动另一个程序
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 我是一个大的C 菜鸟,我需要帮助我的程序启动代码块
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 无法在硬件模式下创建 SGX 安全区 - "invalid launch token"即使文档将无效的启动令牌指定为第一个
- 调试从 Linux 中的另一个C++应用程序启动的 python 脚本
- 尝试启动另一个进程并通过 MPI 加入它,但获得访问冲突
- 当该应用程序中加速文件的最后一个修改时间发生更改时,如何重新启动应用程序
- 启动另一个进程的最佳方式C++?
- 只有在上一个线程返回后才启动一个新的"wxThread"