假设我有两个非类型参数的类模板:
template<uint16_t tValA, uint8_t tValB> class TClass
{
...
};
如果可能的话。如何传递引用或指向函数的指针,例如:
TClass<300,4> Instance1;
TClass<340,5> Instance2;
aFunction(Instance2);
void aFunction(TClass<uint16_t,uint8_t>& _Instance)
{
_Instance.DoSomething();
}
答案 0 :(得分:3)
使用模板功能:
template <uint16_t N1,uint8_t N2>
void aFunction(TClass<N1, N2>& instance)
{
instance.DoSomething();
}
答案 1 :(得分:2)
TClass<300,4>
和TClass<340,5>
是没有公共基类的不同类型(TClass
不计算),因此它们不能传递给同一个函数,除非您将其模板化为好:
template <uint16_t tValA, uint8_t tValB>
void aFunction(TClass<tValA, tValB>& _Instance)
{
_Instance.DoSomething();
}
答案 2 :(得分:2)
你不能因为TClass&lt; 300,4&gt;和TClass&lt; 340,5&gt;是不同的类型。
但是如果你有共同的父类,比如,
class ParentClass
{
public:
virtual void DoSomething();
};
template<uint16_t tValA, uint8_t tValB>
class TClass : public ParentClass
{
//...
};
然后你可以与那个父类有争论。
void aFunction(ParentClass& _Instance)
{
_Instance.DoSomething();
}