C++ C+;中的命名、任意大小的元组+;

C++ C+;中的命名、任意大小的元组+;,c++,r,rcpp,policy-based-design,C++,R,Rcpp,Policy Based Design,我正在创建一个库来从贝叶斯模型中提取样本,作为R包的后端。问题是,算法往往给调试带来困难。此外实际上,我最终得到了大量的“cout”语句 问题是,当我试图将所有内容都转移到一个独立的库时,我意识到我爱上了Rcpp。这是一种存储不同尺寸样品的非常简洁的方法。我试图理解Rcpp的实现,但真诚地(基于)尝试复制它 < > >:有没有办法实现任意大小的命名元组?< /St>(广义上,不需要使用C++元组)。< /P> 我知道我可以使用R安装路径链接Rcpp,但我不确定这是否是一个好的做法,或者我在尝试将

我正在创建一个库来从贝叶斯模型中提取样本,作为R包的后端。问题是,算法往往给调试带来困难。此外实际上,我最终得到了大量的“cout”语句

问题是,当我试图将所有内容都转移到一个独立的库时,我意识到我爱上了Rcpp。这是一种存储不同尺寸样品的非常简洁的方法。我试图理解Rcpp的实现,但真诚地(基于)尝试复制它

< > >:<强>有没有办法实现任意大小的命名元组?< /St>(广义上,不需要使用C++元组)。< /P> 我知道我可以使用R安装路径链接Rcpp,但我不确定这是否是一个好的做法,或者我在尝试将R包上载到(它们非常严格)或将其用作没有R的用户的独立库时是否会遇到问题


谢谢

我不确定这是你想要的。如果您想在Rcpp中构建任意大小的列表并返回到R端,您可以尝试以下操作:

std::vector<std::string> names;

std::vector<SEXP> elements;

// do something with the elements and names

Rcpp::List result(elements.size());

for (size_t i = 0; i < elements.size(); ++i) {
    result[i] = elements[i];
}

result.attr("names") = Rcpp::wrap(names);
// result can be return to R as a list
std::向量名称;
std::向量元素;
//对元素和名称执行一些操作
Rcpp::列出结果(elements.size());
对于(size_t i=0;i
使用
boost::any
?哦,看起来很有希望。但我需要“命名”部分(问题编辑)。可能会向自定义对象添加查找表,并且重载“[”操作符可以做这个把戏,但我事先不知道(我很久以前就学会了C,但我一般都是C++)。你认为怎么样?<代码> STD::MAP<代码> >你可以在C++内部做任何事情,但是请记住,当你想回到R时,你必须通过<代码>interface.Rcpp帮助并映射了许多可以映射的内容,但对于其他事情,您可能必须编写映射器。这似乎是合理的。我不知道CRAN是否支持用C++17编译代码(对于
std::any
,但我想我可以用
boost::any`来代替它。谢谢!