C++等效于 C# 对象关键字

C++ equivalent of C# object keyword

本文关键字:对象 关键字 C++      更新时间:2023-10-16
C

# 对象类型的C++等效项是什么?

我想做C++等效的事情:

public enum TokenType {
    Number,
    Operator,
}
public class Token
{
   TokenType type;
   object value;
   public Token(TokenType type, object value)
   {
       switch (type)
       {
           case TokenType.Number:
                break;
           case TokenType.Operator:
               break;
           default:
                // throw some error
                break;
       }
       this.type = type;
       this.value = value;
   }
}

我不能为类使用模板参数,因为我不知道输入是chardouble还是string,我需要在知道之前声明一个Token

与 C# 不同,C++ 没有总类型层次结构。没有基本类型 intstd::string共享。 事实上,int甚至没有基类型,它是一个基本类型(内置),而不是类类型。

这意味着您必须竭尽全力才能实现类似于 C# 代码的内容。 如果您知道这些类型将限制为某些类型集,则可以使用 std::variant . 如果您没有任何此类限制,则必须使用 std::any . std::variant就像/是一个标记的联合,其中std::any利用类型擦除来存储其中的任何对象。 然后,您可以使用访问者模式来修改存储在variant/any中的对象。 由于std::variant具有一组已知的类型,因此它为您提供了更多方法来访问存储在其中的类型。

你需要

在那里进行大量的转换,但C++中的 void* 表示指向 Anything 的指针。把它想象成一个通用的数据存储,没有附加的长度或任何东西,只是一个位置。

根据您需要执行的其他操作,它可能会派上用场。

您可以使用一些try{}包装的强制转换来查看它是否是您接受的类型之一