0

我开发了一个模板类。现在我想重载低于运算符。我正常尝试过,就像普通班级一样,但它不起作用。

事件.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

事件.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);
}

主文件

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 lowert”。但是如果我的重载函数可以工作,“event2 会更大”(我将 event1 中的时间 5 与 event 2 中的时间 4 进行比较)

4

1 回答 1

2

那是因为你没有比较你认为你正在比较的东西:

if(event1 < event2) {

event1并且event2都有 type Event<int>*。指针有一个内置operator<函数,它做的事情与你想要做的事情完全无关。如果要比较Event<int>指向的实际 s,则必须取消引用它们:

if (*event1 < *event2) {

此时你会遇到模板只能在头文件中实现的问题。

于 2016-03-09T18:07:54.940 回答