我有一个辅助类用于向另一个类提供部分专用版本的方法。我有一次模板,两个专业:C++编译器忽略具有模板化类型的类专业化
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;
那么结果是主模板实例的辅助函数,并helper2,与第三实例化uint32_t的专业化。
我需要helper2来使用StrangeAccessMethod>专业化。
我在做什么错?
我不明白为什么helper1和helper3应该选择不同的规格。你确定?什么是'AccessMethod'? – 2012-08-03 21:29:10
最后一个应该是:FpgaBaseHelper helper3; –
2012-08-03 21:32:08
您不应将全部大写作为模板参数。它们是为宏而保留的。 – Puppy 2012-08-03 21:34:59