什么是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;
}
}
我无法为该类使用模板参数,因为我不知道输入将是char
,double
还是string
,因此我需要声明一个{ {1}},然后才知道。
答案 0 :(得分:2)
与C#不同,C ++没有总的类型层次结构。没有基本类型int
和std::string
共享。实际上int
甚至没有基类型,它是基本类型(内置),不是类类型。
这意味着您必须竭尽全力来实现C#代码之类的东西。如果您知道类型将被限制为某些类型的集合,则可以使用std::variant
。如果没有任何此类限制,则必须使用std::any
。 std::variant
就像/是一个标记联合,其中std::any
利用type erasure在其中存储任何对象。然后,您可以使用visitor pattern来修改存储在variant
/ any
中的对象。由于std::variant
具有一组已知的类型,因此它为您提供了更多访问存储在其中的类型的方法。
答案 1 :(得分:1)
您可能需要大量转换,但是C ++中的void *表示指向任何内容的指针。可以将其视为通用数据存储,没有附加长度或任何内容,只是一个位置。
根据您需要执行的其他操作可能会派上用场。
您可以使用一些try{}
包装的演员表来查看它是否是您接受的类型之一