如何使用非类型参数传递模板化类的Ref或Ptr

时间:2017-08-08 01:08:22

标签: c++ templates

假设我有两个非类型参数的类模板:

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();
}

3 个答案:

答案 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();
}