以下のコードで、すべての特殊化の間で common_fn() をどのように共有しますか ( Widget<A<T> >
TWidget<B<T> >
が何であっても)。
#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 );
}
私は以前、質問をその本質だと思うものに単純化しようとしましたが、部分的な専門化と特性の文脈で質問する必要があることがわかりました.