在c ++中,如何创建从T到T*的转换?

Tza*_*rir 3 c++ templates

在准备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*'"

Kla*_*aim 7

使用类型转换运算符?

class A {
   //...
public:
    template< class T > 
    operator T*() { return this; }
};
Run Code Online (Sandbox Code Playgroud)

但显然,这是不好的做法.