首页 关于muparser 计算库的使用

关于muparser 计算库的使用

小白鼠 2019-05-05 10:50:44 0 5277

0_1315323486giyG.gif

上篇介绍了muParserx 库的使用方法,虽然在速度上回比其他2个库回快很多,但是在低版本中编译(vs2008)中会出现很多错误,所以在低版本中我们可以使用muParser 库,那下面我们介绍这个库的使用方法


muParser是一个用C ++编写的可扩展的高性能数学表达式解析器库。
它的工作原理是将数学表达式转换为字节码并预先计算表达式的常量部分。
网上大多数都是关于它的 C++ 外部库函数的介绍,几乎没有关于它类的成员函数的介绍......

首先,创建一个 Parser 对象,需要 #include "muParser.h"

Parser muparser;
//设置表达式,传入的参数最好是 wstring 的引用的形式

muparser.SetExpr(expression);
//定义变量:

其中第一个参数接受 string_type 类型的数据,它实质上是 wchar_t
第二个参数接受 value_type 类型的数据,它实质上是 &double

muparser.DefineVar(L"x",&var_x);
//获取表达式计算结果:

return muparser.Eval();

//下面是实例

#include "muparser/muParser.h"

using namespace std;
using namespace mu;

void CcalcTestDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	CString calcStr;
	GetDlgItem(IDC_EDIT3)->GetWindowText(calcStr);
	if (calcStr==_T(""))
	{
		GetDlgItem(IDC_EDIT4)->SetWindowText(_T("0.0"));
		return;
	}
	try{
		mu::Parser  parser;
		int rowCount=m_list.GetItemCount();
		for (int i=0;i<rowCount;i++)
		{
			value_type x = _ttof(m_list.GetItemText(i,1));
			parser.DefineVar((string_type)m_list.GetItemText(i,0),  &x);
		}
		parser.SetExpr((string_type)calcStr);

		CString temp;
		temp.Format(_T("%f"),(double)parser.Eval());
		GetDlgItem(IDC_EDIT4)->SetWindowText(temp);

	}catch(...){
			
		GetDlgItem(IDC_EDIT4)->SetWindowText(_T("计算错误!"));
		
	}
}

发表评论