具有出口(1)调用的库的Rcpp
Rcpp for library with exit(1) calls
我有一个混合的C[cblas]/C++[库代码]库(由其他人开发),我已经在Rcpp中封装了它。
许多方法都有如下代码:
void myclass::calculate() {
double* dataSums = (double*) calloc(N, sizeof(double));
if(dataSums == NULL) { printf("Memory allocation failed!n"); exit(1); }
// do some calculations ...
cblas_dgemm(...);
free(dataSums); dataSums = NULL;
}
当然,exit(1)
在这里是一个问题:当从R调用时,它也会关闭R,这是我不想要的。
确保这一点的最佳方法是什么:
- 发生错误时,R不会关闭(用异常替换
exit
调用?) - 内存在
- cblas尽可能保持性能(使用
std::vector
s有问题吗?) - 对库进行最小的更改,以便更容易从上游进行更新
我建议使用
if (dataSums == NULL) Rcpp::stop("Memory allocation failed!n");
无论如何,您的代码中都有相应的try / catch
(C++)层如果您使用Rcpp属性,或者内联,或者按照我们多年来提供的示例手动执行。如果有C++异常层,你可以直接使用它
如果您的代码层需要额外的清理,您可以在那里添加该层。但是C++数据结构将被适当地展开。
相关文章:
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- Rcpp并行无匹配函数,用于调用"转换"
- 在模板化的 Rcpp 函数中调用另一个 cpp 函数
- Rcpp:在 R 中调用 c++ 函数而不导出 c++ 函数
- Rcpp调用的c++计数算法模板
- 在 Rcpp 中调用'as'没有匹配函数
- RCPP - 调用'transform'没有匹配功能
- 从 Rcpp 调用 R 函数的替代方法
- Rcpp:从全局环境调用一个R函数,并在C++代码中使用它
- RCPP 警告:调用'exp'不明确
- 使用 Rcpp 从内部调用 R 的 optim 函数C++
- 使用R中的引用调用将C数组指针转换为Rcpp
- Rcpp编译的属性不可用于调用
- 从 Tableau 调用 Rcpp 函数时出错.如何解释和调试 Rserve 日志
- RCPP 的基准测试或 RCaller 的 C++ 或调用 R 脚本的 Java
- 如何从包(RCpp)中的R脚本调用C++函数
- 在MAC OSX中的同一R会话中调用两个.Call(Rcpp)函数
- Rcpp集成时,c++函数相互调用
- 具有出口(1)调用的库的Rcpp
- 通过Rcpp从R调用QuantLib