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

时间:2019-02-01 14:29:22

标签: 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;
   }
}

我无法为该类使用模板参数,因为我不知道输入将是chardouble还是string,因此我需要声明一个{ {1}},然后才知道。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可能需要大量转换,但是C ++中的void *表示指向任何内容的指针。可以将其视为通用数据存储,没有附加长度或任何内容,只是一个位置。

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

您可以使用一些try{}包装的演员表来查看它是否是您接受的类型之一