首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字符串转换为同名变量的值?

如何将字符串转换为同名变量的值?
EN

Stack Overflow用户
提问于 2020-10-07 03:42:17
回答 1查看 56关注 0票数 0

我正在运行一个函数,其中我接受了一个信号的字符串文字,即"SIGINT“。但是,我需要将其转换为宏SIGINT的值。在不执行一系列if语句的情况下,是否可以做到这一点?

代码语言:javascript
运行
复制
uint8_t sigNumber = 0;
 if(name =="SIGINT") {
   sigNumber = SIGINT;
 } else if (...)
EN

回答 1

Stack Overflow用户

发布于 2020-10-07 04:39:24

使用std:c++latest的Visual Studio 2019:

代码语言:javascript
运行
复制
// #include <csignal>
#define SIGINT     2  // interrupt
#define SIGILL     4  // illegal instruction - invalid function image
#define SIGFPE     8  // floating point exception
#define SIGSEGV   11  // segment violation
#define SIGTERM   15  // Software termination signal from kill
#define SIGBREAK  21  // Ctrl-Break sequence
#define SIGABRT   22  // abnormal termination triggered by abort call

constexpr
std::pair<int, std::string_view>  sig_mapping [] {
    {SIGINT,   "SIGINT"},
    {SIGILL,   "SIGILL"},
    {SIGFPE,   "SIGFPE"},
    {SIGSEGV,  "SIGSEGV"},
    {SIGTERM,  "SIGTERM"},
    {SIGBREAK, "SIGBREAK"},
    {SIGABRT,  "SIGABRT"},
};

template<int SIZE>
constexpr
int StringToValue( const char (&STR) [SIZE] )
{
    for( auto &&i : sig_mapping ) {
        if( i.second == STR )  return i.first;
    }
    return 0;
}

int main()
{
    constexpr auto
        sigunknown { StringToValue("UNKNOWN") },
        sigint     { StringToValue("SIGINT") },
        sigill     { StringToValue("SIGILL") },
        sigfpe     { StringToValue("SIGFPE") },
        sigsegv    { StringToValue("SIGSEGV") },
        sigterm    { StringToValue("SIGTERM") },
        sigbreak   { StringToValue("SIGBREAK") },
        sigabort   { StringToValue("SIGABRT") }
    ;
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64232756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档