5

我发现使用和不使用 -std=c++0x 编译的 Rcpp 之间存在奇怪的不一致。

考虑表达式

Function data_frame("data.frame");

GenericVector a;
a.push_back("17");

return data_frame(a, _["stringsAsFactors"]=0);

(编者注:在 Rcpp 中对 DataFrame 的强制转换实际上归结为 R 函数,但不允许用户设置该标志。)

在“旧”C++(没有 -std=c++0x 集)中,此代码有效。在现代 C++(w/ -std=c++0x 设置)中,这失败了,说“无法将类“pairlist”强制转换为 data.frame”。

显然,这不是世界末日:我只是不使用任何更新的功能。然而,我承认完全不知道是什么导致了这种差异,以及如何在不丢弃 C++11 的情况下解决它。任何想法,任何人?

4

2 回答 2

5

新标准的代码目标功能是在Rcpp大约 2 年前编写的。

但是后来我们意识到CRAN不接受-std=c++0xgcc 的标志(或其他编译器的等效标志),并强制 C++99 标准,因此我们不能实际使用它。

因此,我们几乎不需要维护有C++11意识的代码。这是一种耻辱,因为我们真的很想这样做,但我们更喜欢被 CRAN 接受的曝光。由于我们不维护,因此可能有很多事情不能正常工作。

这个特定问题可能很容易解决。一旦我们获得使用C++11.

于 2012-11-14T21:52:21.227 回答
4

我们喜欢 C++11,迫不及待地想要使用它。但是我们不能在上传到 CRAN 时使用它(根据 CRAN 维护者的法令,他们认为 C++11 在这一点上是“不可移植的”——请向他们投诉,而不是向我们投诉,这让你感到厌烦)。

因此,它目前被“禁止”。有一点检测RcppCommon.h,我们定义HAS_CXX0X. 但是我们还没有真正为此编写代码,因为我们(还)不能按照上一段。

因此,如果您发现了一个错误,请帮我们一个忙,并将其报告到请求后续发送的位置:rcpp-devel列表。可重现性很好,补丁更好:)

于 2012-11-14T20:26:17.297 回答