我是cplusplus的新手,我不知道如何做隐式类型 结构之间的转换。
我想做以下事情:
A a = new __A();
Object o = a;
我知道这需要运营商重载(我想?)然而,尝试着 实现运算符重载是徒劳的。我已经使用了本文中的示例:http://www.cplusplus.com/doc/tutorial/typecasting/但我无法使用任何东西。任何帮助都会非常 欣赏。这是我结构的布局。
typedef __Object* Object;
typedef __Class* Class;
typedef __String* String;
typedef __A* A;
typedef __Test002* Test002;
struct __Object {
__Object_VT* __vptr;
// The constructor.
__Object();
// The methods implemented by java.lang.Object.
static int32_t hashCode(Object);
static bool equals(Object, Object);
static Class getClass(Object);
static String toString(Object);
// The function returning the class object representing
// java.lang.Object.
static Class __class();
// The vtable for java.lang.Object.
static __Object_VT __vtable;
};
struct __A {
__A_VT* __vptr;
__A();
static __String* toString(A);
static int32_t hashCode(Object);
static bool equals(Object, Object);
static Class getClass(Object);
static Class __class();
static __A_VT __vtable;
};
答案 0 :(得分:1)
关于您发布的代码和目标的一些事项
所以可能类似以下
#include <string>
class Object
{
/* ... */
public:
virtual ~Object() = default; // necessary to avoid slicing
virtual std::string toString() const = 0;
/* ... */
};
/* virtual inheritance necessary here if you plan on
deriving from multiple classes that derive from Object;
otherwise remove */
class A : public virtual Object
{
/* ... */
public:
// may or may not be needed, viz., above
// virtual ~A() = default;
std::string toString() const override { return std::string{ "A" }; }
/* ... */
};
#include <iostream>
#include <memory>
int main()
{
std::unique_ptr<Object> o{ std::make_unique( A ) };
std::cout << o->toString() << '\n'; // prints "A"
}
那里有很多东西,所以如果你对我写的任何内容感到困惑(尽管很可能会很快离开主题),就会提出问题。
答案 1 :(得分:0)
要使其工作,__A
需要继承__Object
,因为这是将指针指向前者的唯一方法。