如何通过字符串名称访问结构属性?

新手上路,请多包涵

我有一个结构:

 typedef struct Tick {
    double open;
    double high;
    double low;
    double close;
    double ema100;
} Tick;

我想访问给定密钥的属性:

 Tick currentTick = {44.5, 45.1, 44.2, 44.6, 44.255};
std::string key = "ema100";

std::cout << currentTick[key];

有没有办法在不使用 std::map 的情况下做到这一点?我想答案是否定的,但我只是想在修改所有内容以使用 std::map 并增加我的内存需求之前确定。

原文由 Chad Johnson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 663
1 个回答

有没有办法在不使用 std::map 的情况下做到这一点?

只要你愿意接受一系列级联的 if-else 语句,你就可以做到。

我会质疑设计。

您可以使用基于标签的成员变量部分到达那里。 示例工作示例

 #include <iostream>

struct OpenTag {};
struct HighTag {};
struct LowTag {};
struct CloseTag {};
struct Ema100Tag {};

struct Tick {

   template <typename Tag> struct Member
   {
      double val;

      operator double () const { return val; }

      operator double& () { return val; }
   };

   struct AllMembers : Member<OpenTag>,
                       Member<HighTag>,
                       Member<LowTag>,
                       Member<CloseTag>,
                       Member<Ema100Tag> {};

   AllMembers data;

   template <typename Tag>
      double operator[](Tag t) const
      {
         return (Member<Tag> const&)(data);
      }

   template <typename Tag>
      double& operator[](Tag t)
      {
         return (Member<Tag>&)(data);
      }

};


 int main()
{
   Tick t;
   t[OpenTag()] = 12.345;
   std::cout << t[OpenTag()] << std::endl;
}

输出:

 12.345

原文由 R Sahu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏