首页 > 解决方案 > C++ 等效于 C# 对象关键字

问题描述

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

我不能为类使用模板参数,因为我不知道输入是否将是 a或char,并且我需要在知道之前声明 a 。doublestringToken

标签: c++

解决方案


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

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


推荐阅读