簡體   English   中英

模板類中的C ++運算符重載

[英]c++ operator overloading in template class

我開發了一個模板類。 現在,我想重載低於操作員的值。 我像在普通班上一樣正常地嘗試了,但是沒有用。

事件.h

#ifndef EVENT_H
#define EVENT_H

#include<string>
#include <functional>

template<class T>
class Event
{
public:
    Event(std::string Name, std::function<T ()> fnktptr, int time, Event*resultingEvent);
    virtual ~Event();
    bool operator < (const Event &e) const;
    std::string Name;
    Event *resultingEvent;
    int time;
    std::function<T ()> fnktptr;
};

#endif // EVENT_H

Event.cpp

#include "Event.h"
#include<iostream>

using namespace std;

template<class T>
Event<T>::Event(std::string Name,std::function<T ()> fnktptr, int time, Event*resultingEvent) : Name(Name), fnktptr(fnktptr), time(time), resultingEvent(resultingEvent)
{
    //ctor
}
template<class T>
Event<T>::~Event()
{
    //dtor
}
template<class T>
bool Event<T>::operator < (const Event& e) const
{
  if(this->time < e.time) {
    return true;
  }
  else {
    return false;
  }
}

// No need to call this TemporaryFunction() function,
// it's just to avoid link error.
void TemporaryFunction ()
{
    Event<int> TempObj("",nullptr,0,nullptr);
}

main.cpp

Event<int> *event1 = new Event<int>("sadfsf", nullptr, 5, nullptr);
Event<int> *event2 = new Event<int>("sadfsf", nullptr, 4, nullptr);
if(event1 < event2) {
    cout << "event1 is lower" << endl;
}
else {
    cout << "event1 is greater" << endl;
}

程序打印“ event1 is lowt”。 但是,如果我的重載功能可以工作,則“ event2會更大”(我將event1中的時間5與事件2中的時間4進行比較)

那是因為您沒有在比較自己認為的內容:

if(event1 < event2) {

event1event2都具有Event<int>*類型。 指針具有一個內置的operator< ,它執行的operator<與您要執行的操作完全無關。 如果要比較指向的實際Event<int> ,則必須取消引用它們:

if (*event1 < *event2) {

此時,您將遇到只能在頭文件中實現模板的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM