gpt4 book ai didi

c++11 - Rcpp:以对象作为参数调用函数

转载 作者:行者123 更新时间:2023-12-02 10:22:10 25 4
gpt4 key购买 nike

我在 Rcpp 中有一个函数,它在类中创建一个非常长的映射结构。我在下面给出了一个简单的例子:

#include <Rcpp.h>
using namespace Rcpp;

class A{
private:
std::map<int, int> m_map;
public:
void fill_map(const size_t limit){
for(size_t i=0; i<limit; ++i){
m_map[i] = i;
}
}
size_t size_map(){return m_map.size();}
};

// [[Rcpp::export]]
void func1(const size_t limit) {
A a;
a.fill_map(limit);
}

/* NOT WORKING */
// [[Rcpp::export]]
void func2(A a)
{
std::cout << a.size_map() << "\n";
}
/* NOT WORKING */

假设我调用 func1(1e7),它会填充 a 对象中的 map 。我需要将此 A 对象传递给其他函数,如上面使用 func2 所示。

但是,我的 func2 示例不起作用。在 Rcpp 框架内,使用先前函数中定义的对象调用 func2 的正确且最有效的方法是什么?

最佳答案

C++代码

#include <Rcpp.h>
using namespace Rcpp;

class A
{
private:
std::map<int, int> m_map;

public:
void fill_map(const size_t limit)
{
for(size_t i=0; i<limit; ++i)
{
m_map[i] = i;
}
}

size_t size_map(){return m_map.size();}
};

// [[Rcpp::export]]
XPtr<A> func1(const size_t limit)
{
XPtr<A> ptr(new A(), true);
ptr->fill_map(limit);
return(ptr);
}

// [[Rcpp::export]]
void func2(XPtr<A> ptr)
{
Rcout << ptr->size_map() << std::endl;
}

R代码

a = func1(10)
func2(a)

a 是一个外部指针

关于c++11 - Rcpp:以对象作为参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47119782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com