che*_*cks 13 c++ templates c++11 exprtk
我试图编译ExprTk库的精度比long double.我认为简化会尝试GCC,__float128但我得到以下编译错误,我不知道如何纠正它.
exprtk.hpp: In instantiation of ‘static T exprtk::details::and_op<T>::process(exprtk::details::and_op<T>::Type, exprtk::details::and_op<T>::Type) [with T = __float128; exprtk::details::and_op<T>::Type = const __float128&]’:
exprtk.hpp:28439:10: required from ‘void exprtk::parser<T>::load_binary_operations_map(exprtk::parser<T>::binary_op_map_t&) [with T = __float128; exprtk::parser<T>::binary_op_map_t = std::map<exprtk::details::operator_type, __float128 (*)(const __float128&, const __float128&), std::less<exprtk::details::operator_type>, std::allocator<std::pair<const exprtk::details::operator_type, __float128 (*)(const __float128&, const __float128&)> > >; typename exprtk::details::functor_t<T>::bfunc_t = __float128 (*)(const __float128&, const __float128&)]’
exprtk.hpp:15660:51: required from ‘exprtk::parser<T>::parser(std::size_t) [with T = __float128; std::size_t = long unsigned int]’
mathtof.cpp:18:33: required from here
exprtk.hpp:9923:105: error: call of overloaded ‘is_true(const __float128&)’ is ambiguous
static inline T process(Type t1, Type t2) { return (details::is_true(t1) && details::is_true(t2)) ? T(1) : T(0); }
^
compilation terminated due to -Wfatal-errors.
Run Code Online (Sandbox Code Playgroud)
编辑:
我试过实现自己的 is_true
<typename T>
inline bool is_true(const T v)
{
return std::not_equal_to<T>()(T(0),v);
}
Run Code Online (Sandbox Code Playgroud)
小智 15
在自定义数字类型上专门化ExprTk是相当简单的.在项目页面上找到了两个示例,它们提供了一种简洁明了的方法来在ExprTk中引入新的数字类型.
例子是:
真实类型示例使用double类型实现简单的实数类型.此外,它还在ExprTk命名空间中提供必要的附加功能,在包含实际的ExprTk标头之前需要将其包含在内.
MPFR适配器基于前面的示例,并显示了如何轻松调整MPFR/GMP类型以用于ExprTk.
这两个示例都包含完整的测试套件和使用新引入类型的基准测试.
这是一个例子,有人将他们自己的类型称为DScalar到ExprTk:
https://github.com/filiatra/gismo/blob/stable/external/exprtk_ad_adaptor.hpp
在这里使用它:
https://github.com/filiatra/gismo/blob/stable/src/gsCore/gsFunctionExpr.hpp#L146
应该注意的是,可以简单地使用"自定义实型类型适配器"并使用__float128和其他一些次要替换更改来搜索n替换字符串"real :: type",并且应该都是好的.
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |