我正在为R package to provide debug helper functions写一个gdb
以打印R
s SEXP
和Rcpp
s数据类型的变量值。
C / C ++是一种强类型的语言,但我想避免查询SEXP
的内部数据类型并使用一堆if
。
我如何通过这样的函数签名使用索引范围来实现泛型子集函数:
SEXP dbg_subset(SEXP x, R_xlen_t index_from, R_xlen_t index_to);
一种可能的解决方案是为每个可能的签名编写上述功能,例如对于INTSXP
,LGLSXP
,STRSXP
...,但我很懒;;-)
注意:我不能使用C ++模板,因为链接器只会为我的C ++代码中使用的数据类型(与“正在调试的库”中使用的数据类型不同)创建模板实例。没有一个编译器可以在输入C ++表达式以查询变量时“即时”创建丢失的模板实例。
编辑:参见基于模板的gdb
: