相关疑难解决方法(0)

有没有一种简单的方法将C++枚举转换为字符串?

假设我们有一些命名的枚举:

enum MyEnum {
      FOO,
      BAR = 0x50
};
Run Code Online (Sandbox Code Playgroud)

我搜索的是一个脚本(任何语言),它扫描我项目中的所有标题,并生成一个标题,每个枚举一个函数.

char* enum_to_string(MyEnum t);
Run Code Online (Sandbox Code Playgroud)

以及类似这样的实现:

char* enum_to_string(MyEnum t){
      switch(t){
         case FOO:
            return "FOO";
         case BAR:
            return "BAR";
         default:
            return "INVALID ENUM";
      }
 }
Run Code Online (Sandbox Code Playgroud)

这个问题确实与typedefed枚举和未命名的C风格枚举有关.有人知道这个吗?

编辑:解决方案不应该修改我的源,除了生成的函数.枚举是在API中,因此使用迄今为止提出的解决方案不是一种选择.

c++ string scripting enums

118
推荐指数
12
解决办法
11万
查看次数

将字符串转换为变量名称或变量类型

是否可以通过执行以下操作将字符串转换为变量(反之亦然):

makeVariable("int", "count");
Run Code Online (Sandbox Code Playgroud)

要么

string fruit;
cin >> fruit;    // user inputs "apple"
makeVariable(fruit, "a green round object");
Run Code Online (Sandbox Code Playgroud)

然后能够通过执行以下操作来访问它:

cout << apple; //a green round object
Run Code Online (Sandbox Code Playgroud)

提前致谢!

c++ string

15
推荐指数
4
解决办法
5万
查看次数

使用表示C++中变量名称的字符串访问变量值

如果标题不清楚,我会尽量澄清我的要求:

想象一下,我有一个名为counter的变量,我知道我可以通过以下方式看到它的当前值:

std::cout << counter << std::endl;
Run Code Online (Sandbox Code Playgroud)

但是,假设我有很多变量,我不知道在运行之前我想要查看哪些变量.

有没有人知道我可以通过使用其名称来获取变量值的方法,例如:

std::cout << valueOf("counter") << std::endl;
Run Code Online (Sandbox Code Playgroud)

我觉得能够做到这一点可能会使调试大型复杂项目变得更容易.

在此先感谢您的时间.


更新:所提供的所有答案都是有效且有用的,但重点是C++中不存在反射(并且在阅读建议的链接之后很明显为什么).

c++ variables

9
推荐指数
2
解决办法
2万
查看次数

函数调用中的字符串变量名,C++

我正在扩展我们的内部调试库,而且我遇到了一个奇怪的问题.我想输出一个变量名作为字符串.从本网站的其他地方,我发现可以在文件中使用宏来执行此操作:

#define VarToStr(v) #v
...
printf("%s\n", VarToStr(MatName));
Run Code Online (Sandbox Code Playgroud)

这输出MatName.但现在让我们通过跨文件的函数来尝试这个(Matrix是一个定义的类型):

// DebugHelpers.h
#define VarToStr(v) #v
...
void PrintMatrix(const Matrix &InputMat)
{
    printf("%s\n", VarToStr(InputMat));
    ... // output InputMat contents
}

// DataAnalysis.cc
#include DebugHelpers.h
...
void AnalysisSubProgram342()
{
    Matrix MatName;
    ...
    PrintMatrix(MatName);
}
Run Code Online (Sandbox Code Playgroud)

这输出InputMat,而不是MatName.另一个文件中的函数如何从调用文件中获取变量名?

虽然更复杂的解决方案(包装类等)对更大的社区有用,但我的实现需要最小化对预先存在的代码/类的影响.


更新:

受天顶评论的启发,我为了比较而实施了他提出的两个解决方案,并且快速完成了工作.该宏适用于简单输出,而该功能允许更复杂的工作(以及类型检查/重载).我不知道预处理器宏可能如此复杂.我会记住两者以备将来使用.谢谢 !

c++

2
推荐指数
1
解决办法
187
查看次数

标签 统计

c++ ×4

string ×2

enums ×1

scripting ×1

variables ×1