在智能感知中从枚举中计算字符串常量

Evaluating string constants from enums in Intellisense

本文关键字:计算 字符串 常量 枚举 智能 感知      更新时间:2023-10-16

是否有一种方法可以根据枚举值获得智能感知来评估字符串常量?

这是我尝试过的:

#define MessageIdToName(ID) 
  (::MessageIdRange::LocalMessageStart <= ID && ID <= ::MessageIdRange::LocalMessageEnd) ? 
    ("Local Message") : 
  (::MessageIdRange::CANMessageStart <= ID && ID <= ::MessageIdRange::CANMessageEnd) ? 
    ("CANMessage") : 
  (::MessageIdRange::GlobalMessageStart <= ID && ID <= ::MessageIdRange::GlobalMessageEnd) ? 
    ("Global Message") : 
  ("Unknown")
namespace
{
  static const char* MessageIdToNameFn(const uint32_t ID)
  {
    return
      (::MessageIdRange::LocalMessageStart <= ID && ID <= ::MessageIdRange::LocalMessageEnd) ?
        ("Local Message") :
      (::MessageIdRange::CANMessageStart <= ID && ID <= ::MessageIdRange::CANMessageEnd) ?
        ("CANMessage") :
      (::MessageIdRange::GlobalMessageStart <= ID && ID <= ::MessageIdRange::GlobalMessageEnd) ?
        ("Global Message") :
      ("Unknown");
  }
  static const char* found = MessageIdToName(1025);
  static const char* foundFn = MessageIdToNameFn(1025);
}

其中MessageIdRange是枚举,xMessageStart/End是枚举值。

我希望智能感知能够告诉我found和/或foundFn是什么。

似乎智能感知(在VS2013)不显示指针内容:

static const char* test = "test"; // Nothing for intelisense :-(

但是它显示了数组的内容:

static const char test2[] = "test"; // intelisense shows the content of test2 :-)

因此,如果您将static const char* found更改为static const char found[],智能感知将显示found的含量。

并且由于VS2013还不支持constexpr,因此在编译时无法知道该函数的版本。