3
아래 코드에서 모든 전문화 (Widget<A<T> >
및 Widget<B<T> >
의 경우, T가 무엇이든간에)에서 common_fn()을 공유하는 방법은 무엇입니까?형질을 사용할 때 부분 템플릿 전문화에서 함수 정의 중복 방지
#include <cassert>
struct Afoo {};
struct Bfoo {};
template<typename T> struct A { typedef Afoo Foo; };
template<typename T> struct B { typedef Bfoo Foo; };
template<typename Type> struct Widget
{
Widget() {}
typename Type::Foo common_fn() { return Type::Foo(); }
int uncommon_fn() { return 1; }
};
template<typename T> struct Widget<A<T> >
{
Widget() {}
int uncommon_fn() { return 2; }
};
int main()
{
Widget<A<char> > WidgetAChar;
assert(WidgetAChar.common_fn() == Afoo()); // Error
assert(WidgetAChar.uncommon_fn() == 2);
}
나는 그 본질은 무슨 생각에 질문을 단순화하기 위해 earlier을 시도했지만, 부분 특수화 및 특성의 맥락에서 그것을 물어 필요하다고 밝혀졌습니다.
매우 흥미 롭습니다. 전체 또는 부분 전문화는 형식에 대한 switch 문을 발견하는 것이 코드에 상속 계층이 없다는 신호와 마찬가지로 더 나은 디자인이 누락 된 신호가 될 수 있습니다. 필자는 이러한 종류의 압축을 테스트했으며 코드 하위 집합의 모든 특수화를 폐기하는 데 성공했습니다. – Calaf
미안하지만, 마지막 세 자리는 기억이 안납니다. 그래서 당신의 닉이 "정확하다"고 말할 수 없습니다 ;-) –
그래! 다음 몇 가지 (메모리에서) : 5897932384626 ... – Calaf