在不久的将来,我的包中将需要64位整数。我正在研究基于bit64
包的可行性。基本上我打算在data.table
中使用interger64
S3类创建一个或多个列,并且我打算使用Rcpp将此表传递给C ++函数。
来自Rcpp图库的以下nanotime example清楚地解释了如何在double的向量上构建64位int的向量,并解释如何从C ++到R创建integer64
对象。
我现在想知道如何处理从R到C ++的interger64
。我想我可以颠倒这个原则。
void useInt64(NumericVector v)
{
double len = v.size();
std::vector<int64_t> n(len);
// transfers values 'keeping bits' but changing type
// using reinterpret_cast would get us a warning
std::memcpy(&(n[0]), &(v[0]), len * sizeof(double));
// use n in further computations
}
这是对的吗?还有另一种方法吗?我们可以使用包装器as<std::vector<int64_t>>(v)
吗?对于最后一个问题,我想转换不是基于点对点复制。