2017-08-08 44 views
0

說我有兩個非類型參數,這個類模板:如何通過非類型參數模板類的參考或PTR

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

與模板函數:

template <uint16_t N1,uint8_t N2> 
void aFunction(TClass<N1, N2>& instance) 
{ 
    instance.DoSomething(); 
} 
+0

是否可以將引用傳遞給另一個模板參數? – finis

+0

我不明白你的意思。 'template void aFunction(TClass &,T&)'? – Jarod42

2

TClass<300,4>TClass<340,5>是不同的類型沒有一個共同的基類( TClass不計數),因此它們不能傳遞給相同的函數,除非您將其設爲模板:

template <uint16_t tValA, uint8_t tValB> 
void aFunction(TClass<tValA, tValB>& _Instance) 
{ 
    _Instance.DoSomething(); 
} 
2

您不能因爲TClass < 300,4>和TClass < 340,5>是不同的類型。

但是,如果你有共同的父類一樣,

class ParentClass 
{ 
public: 
    virtual void DoSomething(); 
}; 

template<uint16_t tValA, uint8_t tValB> 
class TClass : public ParentClass 
{ 
    //... 
}; 

然後你就可以擁有與父類的說法。

void aFunction(ParentClass& _Instance) 
{ 
    _Instance.DoSomething(); 
}