여기에 몇 가지 문제가 있습니다.
// [[Rcpp::export]]
template <typename T>
void MyFunc(T object) { ... }
을 R을 입력하면 입력이 정적 인 C++ (수행 및 런타임에 저장), 동적 때문 (모든해야한다 : 당신이 쓸 수 있도록 특히, Rcpp는 템플릿 함수의 수출 처리하지 않는 속성 컴파일 타임에 알려짐). 동적 인 세계와 정적 인 세계 사이에 다리를 수동으로 생성해야합니다.
일반적인 접근법은 템플릿 함수와 '디스패치'함수를 만드는 것입니다.
template <typename T>
void MyFuncImpl(T object) { .... }
// [[Rcpp::export]]
void MyFunc(SEXP object)
{
switch (TYPEOF(object))
{
case INTSXP: return MyFuncImpl<IntegerVector>(object);
case REALSXP: return MyFuncImpl<NumericVector>(object);
...
}
}
귀하의 경우 전달 된 객체가 행렬인지 여부 (예 : 행렬)에 따라 발송물을 분리해야 할 수도 있습니다. if (Rf_isMatrix(object)) { ... } else { .... }
.
당신은 Rcpp gallery 도움이 이러한 기사를 찾을 수 있습니다으로
제쳐두고 - 당신은 R 객체의 기본 유형에 직접 템플릿을하려는 경우, 다음과 같이 쓸 수도 있습니다 :
template <int RTYPE>
void MyFuncImpl(Vector<RTYPE> object) { .... }
당신의 필요에 따라 더 유용 할 수도 있고 그렇지 않을 수도 있습니다.
질문의 모호성에 대해 사과드립니다. 이것은 아마도 사람들이 루프를 던져 버릴 정도로 간단 할 것입니다. 그리고 저는 템플릿 기반 행렬을 얻는 방법에 대해 대부분 궁금합니다. 일부 코드가 추가되었습니다. – Coat
업데이트를 통해 질문에 적절하게 답변 할 수 있다고 생각합니다. –
동의 함, @KevinUshey. 외부의 일반적인 템플리트처럼 보이지만 C가 C로되어 있기 때문에 내부에서 다이나믹하게 디스패치하고 R은 R에서 완료됩니다. –