如何为Rcpp类提供自定义生成器/构造函数?

时间:2019-01-17 11:27:05

标签: r rcpp

我已经为我的C ++库编写了R绑定,但是出于可用性的考虑,我想在R中稍微改变方法和构造函数的行为:添加默认值并将变量包装到列表中。

例如:我不希望调用生成器ClassName(name, list(var1=1, var2=2)),而是希望拥有ClassName(name, var1=1, var2=2)

最初,我只是使用loadModules并直接使用C ++方法,但是后来切换到setRcppClass,这使我可以覆盖包括initialize的方法。最初,我尝试使用callNextMethod无济于事,然后基本上求助于复制粘贴Rcpp提供的initialize方法所做的一些小的调整。

setRcppClass("ClassName", module="mymodule",
        methods=list(
            initialize=function(.Object, name, ...) {
                args <- list(...)
                argNames <- allNames(args)
                cppArgs <- nzchar(argNames)
                .CppObject <<- .CppGenerator$new(name, args[cppArgs])
            },
            show=function() {
                cat('ClassName of type:', .CppObject$name(), '\n')
            }
))

除了我需要显式命名name参数外,这几乎满足了我的要求: ClassName(name="Foo", var1=1, var2=2)

显然,我也想避免复制Rcpp代码,而是以某种方式调用它。

另外,R CMD检查抱怨所有对 .CppGenerator .CppObject allNames

0 个答案:

没有答案