使用特征时,避免在部分模板特化中复制函数定义

时间:2011-08-19 04:48:53

标签: c++ templates partial-specialization

如何在下面的代码中的所有特化项(对于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将问题简化为我认为的本质,​​但事实证明有必要在部分专业化和特征的背景下提出问题。

0 个答案:

没有答案