gpt4 book ai didi

c++ - 使用结构的隐式类型转换

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:25 27 4
gpt4 key购买 nike

我是 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;
};

最佳答案

关于您发布的代码和您的目标的一些事情

  • C++ 通过继承为您处理虚拟方法分派(dispatch),因此无需将虚拟表手动插入您的类
  • 正如其他人提到的,您使用的是无效/保留的标识符
  • 如果您正在创建一个单根继承层次结构(如在 Java 中或添加反射支持之类的东西),那么您可能希望将 Object 类中的所有静态方法重构为虚拟或纯虚拟成员函数,具有 class公开派生自类 Object 并重写这些方法
  • 你在顶部的用例暗示你真正想要的是能够有一个指向类 A 的对象的指针使用类 Object 的接口(interface):这又是通过 C++ 中的公共(public)继承启用的虚拟分派(dispatch)

所以也许像下面这样

#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"
}

里面有很多内容,所以如果您对我写的任何内容感到困惑,请提出问题(尽管它可能很快就会偏离主题)。

关于c++ - 使用结构的隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27158660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com