在准备OOP考试时,我很高兴看到g ++编译下面的代码(没有实例化),即使它似乎毫无意义:
template<class T> void f() {
T t = "a";
t += 5.6;
t->b();
T* p = t;
p = p*(t/"string");
}
Run Code Online (Sandbox Code Playgroud)
然后我开始着手实现这个实例化和编译.
我创建了以下类:
class A {
public:
A(const char* s) {}
void operator+=(double d) {}
A operator/(char* str) {return A("");}
A* operator->() {return this;}
A* operator=(A& a) {return &a;}
void b() {}
};
A* operator*(A* a, A b) {return new A("");}
Run Code Online (Sandbox Code Playgroud)
它允许几乎所有的模板工作,除了线
T* p = t;
Run Code Online (Sandbox Code Playgroud)
我的问题是,什么运算符或构造函数将使这一行工作?目前它给我"错误:初始化时无法将'A'转换为'A*'"
使用类型转换运算符?
class A {
//...
public:
template< class T >
operator T*() { return this; }
};
Run Code Online (Sandbox Code Playgroud)
但显然,这是不好的做法.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |