我只希望在模板類型是指針時調用下面的函數。下面的代碼是一個鏈接列表(自定義類,不是任何標準)的函數,它是類型爲t的模板。當模板類型不是指針時,即使函數根本不被調用,也會引發編譯錯誤。只有當函數是從非指針模板類型調用時才需要拋出錯誤,如果從作爲指針的模板類型調用它,則不會發生錯誤。如何限制模板函數被調用,如果類型不是指針?
virtual void ClearAndDelete()
{
ListNode<t> * ptr = this->FirstNode;
for (; ptr != nullptr;)
{
ListNode<t> * nextptr = ptr->Next;
delete ptr->Item;//ERROR C2541
delete ptr;
ptr = nextptr;
}
this->TotalNodes = 0;
this->FirstNode = nullptr;
this->LastNode = nullptr;
}
從Visual Studio 2015年的特定錯誤代碼是 錯誤C2541「刪除」:那不是指針不能刪除的對象。這發生在'unsigned short'模板類型上,即使我的模板類型的代碼都沒有調用此函數。建議將不勝感激。
按照要求,這是ListNode
template<typename t> struct ListNode
{
public:
t Item;
ListNode<t> * Next;
ListNode(t what) : Item(what)
{
this->Next = nullptr;
}
ListNode(t what, ListNode<t> * nextnode) : Item(what)
{
this->Next = nextnode;
}
};
你可以顯示的是ListNode的定義 – MikeMB
@MikeMB我編輯原始文章包括它 –
如果你發現自己不得不這樣做,這聽起來像你的班級做得太多了。查找「關注點分離」。 – juanchopanza