c++ - 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 。double
string
Token
解决方案
与 C# 不同,C++ 没有完整的类型层次结构。没有基本类型int
和 std::string
共享。实际上int
甚至没有基类型,它是一个基本类型(内置)而不是类类型。
这意味着您必须竭尽全力才能实现 C# 代码之类的东西。如果您知道类型将被限制为某些类型,那么您可以使用std::variant
. 如果您没有任何此类限制,则必须使用std::any
. std::variant
就像/是一个标记的联合,std::any
它利用类型擦除在其中存储任何对象。然后,您可以使用访问者模式来修改存储在variant
/中的对象any
。由于std::variant
具有一组已知的类型,它为您提供了更多访问存储在其中的类型的方法。
推荐阅读
- android - 在设备上全新安装应用程序后,当应用程序死机时,Android AlarmManager 会取消警报
- python - 基于矩阵的 CVXPY 二次程序不是 DCP
- c++ - OpenMP:如何在任务中实现线程本地对象?
- php - 使用 PHP 更新数据库中的值
- botframework - 在 Microsoft 聊天机器人中通过 Direct-line API 发送 JWT 以对用户进行身份验证
- javascript - 如何获取 json 数组中的所有“名称”值?
- google-maps - 如何使用 Google Places API 获取单个邮政编码覆盖的所有城市?
- postgresql - 对 postgresql 中的项目进行计数,对于未找到的项目输出零
- windows - Docker Registry 没有自定义主机名
- sql - 在 SQLite 中按相反方向的两列排序