c++ - 按函数名称列出的关键字的编译时列表
问题描述
这个有点,但我想我会问。我花了 6 个小时寻找解决方案,但没有找到任何适用的解决方案。我有一种情况,主代码的子模块可以通过类似版本重新编译来替换。例如:
#include <iostream>
// g++ -std=c++1z -o list *.cpp
class Foo
{
public:
std::string funcA() {
// Do important stuff
int choice = 0;
switch(choice){
case 0:
return "KeywordX";
break;
case 1:
return "KeywordY";
break;
case 2:
return "KeywordZ";
break;
}
}
std::string funcB() {
std::string val1 = std::string(__func__) + "-KeywordY";
std::string val2 = std::string(__func__) + "-KeywordZ";
std::string val3 = std::string(__func__) + "-KeywordQ";
// Do other important stuff
int choice = 1;
switch(choice){
case 0:
return val1;
break;
case 1:
return val2;
break;
case 2:
return val3;
break;
}
}
};
int main ()
{
Foo foo;
printf("funcA = %s\n", foo.funcA().c_str());
printf("funcB = %s\n", foo.funcB().c_str());
}
在上面的代码示例中,主代码将被赋予一个新版本的类 Foo 来执行唯一的处理,并且它将始终具有相同的函数名称列表(如 funcA、funcB),但可能有 50 个或更多他们。函数会执行一些处理,然后返回适当的关键字,如 funcA 所示('choice' 是处理的结果),主代码将响应。主代码有一个 UML 文件,其中列出了关键字和相应的响应。
这里的问题是 Foo 类可能有一个或多个拼写错误,或者特定函数可能返回一个对其返回无效的关键字,并且主代码不会知道这一点,直到某些随机事件集导致要返回的关键字。所以,最好有办法在代码启动时知道所有关键字的列表,按函数,可能会返回,因此可以将其与 UML 文件进行比较,并引发错误。funcB 示例解决了“按功能”问题,但仍然无法在启动时访问它。
理想情况下,所有关键字的列表/映射,按函数排序会很好,但即使所有这些信息连接到一个字符串,可以在启动时解析也可以。
是的,每次返回都引用的关键字主列表将解决“错字”问题,但不能解决错误关键字的选择。
谢谢你的想法。
解决方案
您可以强制必须事先列出该函数可以返回的所有内容。通过一些巧妙的操作,可以访问此列表:
推荐阅读
- laravel - 在 Laravel 中更改查询字符串的值
- after-effects - After Effects - 合成选项卡中的双视图
- php - PHP Laravel REST api 双反关系
- python-3.x - TensorFlow 2.0 - 学习率调度器
- typescript - 在 Typescript 中使用交集类型扩展函数参数类型
- kotlin - 使用 Kotlin Exposed 创建数据库后连接到数据库
- jquery - How to modify close button in submenu of jQuery mobile for initial opening
- java - 如果我按 Enter 或关闭键盘,EditText 会更改大小
- sip - Linphone opus 编解码器采样率
- components - 在 App 组件旁边动态呈现 Blazor 组件