C++等效于 C# 对象关键字
C++ equivalent of C# object keyword
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
,我需要在知道之前声明一个Token
。
与 C# 不同,C++ 没有总类型层次结构。没有基本类型 int
和std::string
共享。 事实上,int
甚至没有基类型,它是一个基本类型(内置),而不是类类型。
这意味着您必须竭尽全力才能实现类似于 C# 代码的内容。 如果您知道这些类型将限制为某些类型集,则可以使用 std::variant
. 如果您没有任何此类限制,则必须使用 std::any
. std::variant
就像/是一个标记的联合,其中std::any
利用类型擦除来存储其中的任何对象。 然后,您可以使用访问者模式来修改存储在variant
/any
中的对象。 由于std::variant
具有一组已知的类型,因此它为您提供了更多方法来访问存储在其中的类型。
你需要
在那里进行大量的转换,但C++中的 void* 表示指向 Anything 的指针。把它想象成一个通用的数据存储,没有附加的长度或任何东西,只是一个位置。
根据您需要执行的其他操作,它可能会派上用场。
您可以使用一些try{}
包装的强制转换来查看它是否是您接受的类型之一
相关文章:
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 函数上的关键字'const'意味着对象字段完全只读?
- 我可以在动态知道其类型的模板类对象中使用 auto 关键字吗?我不能在没有初始值设定项的情况下使用 auto 关键字吗?
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- C++等效于 C# 对象关键字
- 使用两种或两种以上数据类型的对象作为c++映射、OOP的关键字
- 如果我返回const定义的对象,为什么const关键字被取消资格
- 使用新关键字创建的C 对象不会呈现;在堆栈上创建的对象确实可以
- C++中“virtual”关键字在对象而不是指针上的行为
- C++对象初始化,无需 new 关键字并使用指针
- 当对象不使用 new 关键字但父对象在堆中时,对象是否存储在堆栈或堆中
- 在没有 new 关键字的情况下初始化C++对象的内存从何而来
- 循环中的多个对象C++而不"new"关键字
- 为什么不使用class关键字就无法创建对象
- 在指向对象的指针映射上的迭代器作为关键字c++
- 删除c++中的对象,以及new关键字
- java中的final关键字在应用时是否显示不同的效果:- 1)对原语2)对对象
- Virtual 关键字使派生对象中的方法无法访问
- 为什么当我们使用关键字创建对象时不调用析构函数"NEW"?
- nullptr 不是一个特殊的关键字和 std::nullptr_t 的对象吗?