当前位置: 首页 > 知识库问答 >
问题:

如何在C++中将一个类型的字符串表示形式转换为该类型本身?

东方文林
2023-03-14

我是C++的新手,需要将一个类型的字符串表示形式转换为该类型本身,比如:“int”转换为int,“float”转换为float,……但似乎很难实现。

例如在seudo代码中:

//how to implement this function or something like this...
auto gettype(string typestr);

//usage
string types[4] = {"int", "double", "float", "string", ...};
gettype(type[0]) val; //then the type of val is int

共有1个答案

谯翔
2023-03-14

您不可能让getType(type[0])val;成为声明。

我能想到的最接近的就是

constexpr char int_t[] = "int";
constexpr char double_t[] = "double";
constexpr char float_t[] = "float";
constexpr char string_t[] = "string";

constexpr const char * types[] = { int_t, double_t, float_t, string_t };

template <const char *> struct gettype;

template<> struct gettype<int_t> { using type = int; };
template<> struct gettype<double_t> { using type = double; };
template<> struct gettype<float_t> { using type = float; };
template<> struct gettype<string_t> { using type = std::string; };

template <const char * name> using gettype_t = typename gettype<name>::type;

这要求参数是编译时常量,但您可以

gettype_t<type[0]> val;

只要typeconstexpr并且具有constexpr运算符[]

 类似资料:
  • 问题内容: 为了将类名存储在日志文件中,我将类类型的描述转换为字符串: 但是,我没有成功将其反向转换为类型的变量以在通用方法中使用它。 我该怎么办? 问题答案: 您可以从返回类,但是获取类名时需要使用项目的 模块 名。如果不使用模块名称,则它将返回,因为先前引用的类名称尚未完全由 模块名称 限定。您应该更改类名称字符串以表示您的类的完全限定名称:

  • 问题内容: 假设我定义了以下类型: 我将如何以编程方式将类型作为字符串获取,因此以后可能很容易重构,而不是: 我不太喜欢,因为它实例化了它,也可以从Interface实例化。 问题答案: 您可以使用包装(包装也可以在内部使用)。您可以从 指向 该类型的 指针 开始,并使用没有分配的 类型化_指针值,并且可以使用来从其描述符导航到指针的 _基本 类型(或 元素 类型)的描述符。 例: 输出(在Go

  • 我在Pyspark有dataframe。它的一些数值列包含'nan',所以当我读取数据并检查dataframe的模式时,这些列将具有'string'类型。我如何将它们更改为int类型。我用0替换了'nan'值,并再次检查了模式,但它也显示了这些列的字符串类型。我遵循下面的代码: 这里的列“Plays”和“Drafts”包含整数值,但由于这些列中存在nan,它们被视为字符串类型。

  • 这是我的代码后运行这段代码,我得到异常: 以下给出了堆栈跟踪的异常: 请帮我解决这个问题。

  • 问题内容: 给定python字符串列表,如何自动将其转换为正确的类型?意思是,如果我有: 我希望将其转换为列表 其中第一个元素是stuntng,第二个元素是int,第三个元素是float,第四个元素是int。 我怎样才能做到这一点?谢谢。 问题答案: import ast

  • 方法(下面)是一个类型,我用作参数的类是一个。我想知道我选角的方式是否管用: 这就是方法: 此URL指向类: 我把它放进了粘贴箱,因为课程太长了。