c++操作符重载模板类
C++ operator Overloading Template Class
我想写一个模板类,覆盖给定类的一些函数。一个简单的例子最能说明我在做什么……
#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);
}
相关文章:
- 重载操作符+:表达式必须是整型或无作用域枚举类型
- 重载操作符
- 如何重载操作符==外模板类使用友元函数
- 重载*操作符,使其在左右两边都工作
- 重载操作符<对于非随机迭代器
- 在c++中重载操作符的时间和原因
- 如何在c++中重载=操作符来通过引用进行复制
- 如何在c++中获取定义为友元的重载操作符的地址
- 使用重载操作符的文件操作表达式没有给出预期的结果
- 重载操作符()
- 重载操作符()并在类内使用
- 类中的重载操作符+
- 定时使用重载操作符
- c++带类的重载操作符
- 用列表容器重载[]操作符
- 重载操作符=
- 任何重载操作符()的静态检测
- 重载操作符以处理类对象
- 在使用另一个类的类中重载操作符==
- 派生类和基类中的重载操作符不同