Возможно, вы путаете конструкцию языка R ...
с чем-то, что, по вашему мнению, также существует в C++. И хотя в C++ есть varargs
, который не поддерживается Rcpp из-за интерфейса от R. Все, что у нас есть, это интерфейс .Call()
.
SEXP somefunction(SEXP a, SEXP b, SEXP c, ...)
и здесь ...
используется в буквальном смысле только для пояснения: у вас может быть 0, 1, 2, 3, ... SEXP
аргументов. Но те, которые вы используете, должны быть полностью квалифицированы. Короче говоря, использование ...
приводит к синтаксической ошибке, которую вы видите. См. Раздел 5.9 документа Написание расширений R для подробностей.
И в качестве примечания, именно поэтому у нас есть код, сгенерированный макросами, в Rcpp. Теперь, с C++11, вы также можете использовать вариативные шаблоны в коде C++ (которые Rcpp11 очень эффективно использует в своем внутреннем коде), но это, конечно, не меняет интерфейс на R, который остается тем же интерфейсом .Call()
, и, следовательно, такое же ограничение. Шаблоны Variadic очень хороши и открыты для использования в вашем коде C++ либо с Rcpp, либо с Rcpp11, но они не меняют интерфейс на R. Вам нужен фиксированный набор аргументов, и вы не можете полагаться на число переменных.
Тем не менее, если вы просто передаете объект List
в качестве одного из ваших аргументов, вы можете по желанию пройти его по положению или имени и проверить содержимое. Это наиболее близко по духу к вашему вопросу.
person
Dirk Eddelbuettel
schedule
05.07.2014