1
나는 클래스 템플릿을함수 템플릿 내에서 템플릿 전문화를 선언하는 방법은 무엇입니까? 가정하자
template<int I, int J> class bar { /* ... */ };
을 가지고 있고 (고정) 바인딩 두 번째 템플릿 인수로 bar
동일 C
다음과 같은 템플릿 템플릿
template<template<int> class C>
struct foo { void func(some_type arg); };
를 사용하고 싶습니다. 이를 달성하는 방법 중 하나는 바로이 목적을 위해 보조 클래스 (use_foo_helper
)이 매우 불편 생성, 그러나
template<int J, template<int, int> class B>
struct use_foo_helper {
template<int I> using BJ = B<I,J>;
static void func(some_type arg) { foo<BJ>::func(arg); }
};
template<int J>
void foo_bar(some_type arg) { use_foo_helper<J,bar>::func(arg); }
입니다. 차라리 그냥 함수 템플릿 foo_bar
을 정의 할 좋아하지만 실패합니다 :
template<int J>
void foo_bar(some_type arg)
{
// template<int I> using barJ = bar<I,J>; // this appears to be illegal
// for<barJ>::func(arg);
foo<???>::func(arg); // what shall I put in place of ???
};
Q 헬퍼 클래스를 방지 할 수있는 방법이 있나요? Q 더 좋은 디자인 패턴이 있습니까?
여전히 보조 헬퍼 클래스'foo_bar'와'barJ'를 사용합니다. 그래서 당신은 그 사람들은 피할 수 없다고 말하고 있습니까? 그렇다면 이것을 증명할 수 있습니까? – Walter
@Walter 죄송합니다. 질문을 부지런히 읽었습니다. 예, 저는 헬퍼 클래스 사용을 피할 수 없다고 생각합니다. 아니, 나는 이것을 증명할 수 없다. 하지만 당신도 템플릿을 로컬 클래스의 멤버로 선언 할 수 없다는 것을 알고 있습니다 (14.5.2/2 참조). 그래서 ... – Constructor