c++ 运算符在模板中重载 class
c++ operator overloading in template class
我开发了一个模板 class。
现在我想重载低于运算符。
我正常尝试过,就像使用普通 class 一样,但它不起作用。
Event.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 lowert"。
但是如果我的重载函数可以工作,"event2 would be greater"
(我将事件1中的时间5与事件2中的时间4进行比较)
那是因为你没有在比较你认为在比较的东西:
if(event1 < event2) {
event1
和 event2
都有类型 Event<int>*
。指针有一个内置的 operator<
,它做的事情与你想做的完全无关。如果你想比较指向的实际 Event<int>
s,你必须取消引用它们:
if (*event1 < *event2) {
此时您将 运行 解决 templates can only be implemented in the header file.
的问题
我开发了一个模板 class。 现在我想重载低于运算符。 我正常尝试过,就像使用普通 class 一样,但它不起作用。
Event.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 lowert"。 但是如果我的重载函数可以工作,"event2 would be greater" (我将事件1中的时间5与事件2中的时间4进行比较)
那是因为你没有在比较你认为在比较的东西:
if(event1 < event2) {
event1
和 event2
都有类型 Event<int>*
。指针有一个内置的 operator<
,它做的事情与你想做的完全无关。如果你想比较指向的实际 Event<int>
s,你必须取消引用它们:
if (*event1 < *event2) {
此时您将 运行 解决 templates can only be implemented in the header file.
的问题