c++操作符重载模板类

C++ operator Overloading Template Class

本文关键字:重载 操作符 c++      更新时间:2023-10-16

我想写一个模板类,覆盖给定类的一些函数。一个简单的例子最能说明我在做什么……

#include <iostream>
using namespace std;
class box{
public:
    void print(){ cout << "Good!"; }
};
template <class T>
class shadow{
    T obj;
public:
    T& operator. (void) { return obj; }
};
int main(void){
    shadow<box> t;
    t.print();
}

检查主我想做什么。我想模拟呼叫其中一个Box的方法通过模板类调用。好像是算子。"不可能。过载。我最接近这个的方法,就是超载操作符()

T& operator() (void) { return obj; }

和在main中调用t().print()。你能提出一个更好的方法来做我正在做的事吗?提前谢谢。

ps:我真的必须这样做,我不想使用继承

一种选择是重载T* operator->和/或T& operator*():

template <class T>
class shadow{
    T obj;
public:
    T* operator->() { return &obj; }
    const T* operator->() const { return &obj; }
};

中为了简洁起见省略了T& operator*(),尽管两者都有意义。然后像这样使用:

int main()
{
    shadow<box> t;
    t->print();
}

或者,提供一个转换操作符operator T&();,并将t传递给模板实参类型为:

的函数。
template <class T>
class shadow{
    T obj;
public:
    operator T&() { return obj; }
    operator const T&() const { return obj; }
void foo(const box& b)
{
  b.print(); // Note: you need to make box::print() a const member function
}
int main()
{
    shadow<box> t;
    foo(t);
}