ライブラリと、そのライブラリに依存する複数のプロジェクトがあるとします。ライブラリ ヘッダーには、すでにいくつかの部分的なクラスの特殊化があります。各依存プロジェクトが独自の部分的な特殊化でオーバーライドできるようにしたいと考えています。パフォーマンス上の理由から、これをすべて静的に達成する必要があります。いくつかの簡略化されたコードを以下に示します。
ライブラリ コード:
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<>
どこかに必要だと思います。どうすればこれを回避できますか?