2013-03-01 2 views
3

Предположим, у меня есть библиотека и несколько проектов, зависящих от этой библиотеки. В заголовках библиотек уже есть частичные специализации класса. Я хочу, чтобы каждый зависимый проект переопределялся со своими частными специализациями. Мне нужно добиться этого все статически по соображениям производительности. Ниже приведен упрощенный код.Специализация шаблона Partial C++ в зависимом проекте

код библиотеки:

template <class A, class B, class Enable=void> 
struct Widget; 

struct Foo 
{ 
}; 

template <class B> 
struct Widget<Foo, B> 
{ 
}; 

код пользователь:

template <class B> 
struct DoSpecialize; 

template <class B> 
struct Widget<Foo, B, enable_if< DoSpecialize<B> >::type 
{ 
}; 

Проблемы здесь мы в конечном итоге с несколькими определениями той же специализация. Я думаю, нам нужно где-то disable_if<>. Как мы могли избежать этого?

+0

В этой последней специализации 'B' действительно конкретный тип? – aschepler

+0

нет, это параметр параметра ... крепление вопрос – paperjam

ответ

1

Я предлагаю решить его с разделением слоев. Библиотека имеет свои собственные специализации, и пользователь может перезаписать их, если это необходимо. Если это приемлемо, следующий код библиотеки:

namespace impl 
{ 
    template <class A, class B, class Enable=void> 
    struct Widget; 
} 

template <class A, class B, class Enable=void> 
struct Widget : impl::Widget< A, B > {}; 

struct Foo 
{ 
}; 

namespace impl 
{ 
    template <class B> 
    struct Widget<Foo, B> 
    { 
    }; 
} 

и код пользователя остается таким, какой он есть.