我有一个Rcpp函数,该函数具有一个可选参数,它是金融工具的到期日。可以以字符串(例如“ 2y”)或整数形式给出。如果未提供任何值,则该函数需要使用默认整数。如何设置该参数的默认值?
我已经用SEXP参数定义了该函数,代码将测试这是否是字符串,并根据此转换以两种不同的方式在实际日期中转换该成熟度。但是,我不能为SEXP参数设置默认值。看来这是一个基本问题,但我在Google上搜索了很多,却找不到任何内容。
Date CPPConvertDate(Date ParamDate, SEXP MaturityDate = 1) {
Date Result ;
const int type_Matu = TYPEOF(MaturityDate) ;
if (type_Matu == 16){
std::string MaturityDate_string = as<std::string>(MaturityDate) ;
//' DO STUFF
} else {
int MaturityDate_int = as<int>(MaturityDate) ;
//' DO OTHER STUFF
}
return (Result) ;
}
编译器告诉我“无法使用R类型为int的R值初始化SEXP类型的参数”,因此很明显我不能为MaturityDate使用默认值1。如果可能的话,我想避免使用两个不同的函数,一个带有int参数,另一个带有字符串参数。
答案 0 :(得分:1)
收听编译器,因为它是wisdown的来源。 SEXP
没有从1开始的赋值,因为它是一个联合类型-这就是为什么我们拥有所有这些wrap()
函数以在给定所有可能的输入的情况下返回SEXP
的原因。
因此,如果它是Date
,请使用日期类型。我在RQuantLib
(毕竟导致Rcpp
)中已经做了十多年了。如果您需要一种混合类型来实现不同的行为,那么方法将很难为您提供一种默认值。
也:不是“ RCPP”。 Rcpp,请。