部分的に特殊化されたバージョンのメソッドを別のクラスに提供するために使用されるヘルパークラスがあります。プライマリテンプレートと2つのスペシャライゼーションがあります。
template<typename BASE, typename ACCESS_METHOD, int MODULE>
struct BaseHelper
{
void f1()
{
....
}
}
template<typename BASE, int MODULE>
template<typename DEVICE>
struct BaseHelper< BASE, StrangeAccessMethod< DEVICE >, MODULE >
{
void f1()
{
....
}
}
template<typename BASE, int MODULE>
struct BaseHelper< BASE, uint32_t, MODULE >
{
void f1()
{
....
}
}
次の場合:
FpgaBaseHelper< SomeBaseClass, AccessMethod, 1 > helper1;
FpgaBaseHelper< SomeBaseClass, StrangeAccessMethod<MyDevice>, 2> helper2;
FpgaBaseHelper< SomeBaseClass, uint32_t, 3 > helper3;
次に、結果として、プライマリテンプレートがhelper1とhelper2に対してインスタンス化され、3番目のテンプレートがuint32_tスペシャライゼーションをインスタンス化します。
StrangeAccessMethod <>スペシャライゼーションを使用するには、helper2が必要です。
私は何が間違っているのですか?