C++ 在C+中扩展节俭生成的对象+;

C++ 在C+中扩展节俭生成的对象+;,c++,thrift,C++,Thrift,使用以下.thrift文件 struct myElement { 1: required i32 num, } struct stuff { 1: optional map<i32,myElement> mymap, } 所有这些看起来都很糟糕 我现在要采用的解决方案: [这都是伪代码,没有检查此副本以进行编译] 以下生成的代码,我无法修改 (尽管我可以将地图更改为集合) 类生成元素{ 公众: // ... int32_t num; // ... }; 类生成地图{

使用以下
.thrift
文件

struct myElement {
  1: required i32 num,
}

struct stuff {
  1: optional map<i32,myElement> mymap,
}
所有这些看起来都很糟糕


我现在要采用的解决方案:

[这都是伪代码,没有检查此副本以进行编译]

以下生成的代码,我无法修改 (尽管我可以将地图更改为集合)

类生成元素{
公众:
// ...
int32_t num;
// ...
};
类生成地图{
公众:
// ...
std::map myGeneratedMap;
// ...
};
//生成代码的结尾
应用程序中的其他位置:

class Element {
 public:
   GeneratedElement* pGenerated; // <<== ptr into element of another std::map!
   time_t lastAccessTime;
};


class MapWrapper {
private:
  GeneratedMap theGenerated; 

 public:
   // ...
   std::map<int32_t, Element>  myMap;
   // ...

   void doStuffWIthBoth(int32_t key)
   {
     // instead of 
     //   theGenerated.myGeneratedMap[key].num++;  [lookup in map #1]
     //   time(&myMap[key].lastAccessTime);        [lookup in map #2]
     Element& el=myMap[key];
     el.pGenerated->num++;
     time(&el.lastAccessTime);
   }
};
类元素{
公众:

GenerateElement*p Generated;//您考虑过只使用简单的集装箱船吗


你使用C++,因此可以只打包结构(s)在某个类或其他结构中,并提供包装器方法来执行任何您想要的操作。

如果我理解正确,您建议我将
东西
包装到另一个类中。如果是这样,它将如何帮助我扩展
myElement
s?如果这不是您的意思,那么我想我需要一个示例。最后,它看起来像很多要开发的访问方法的主要好处是外部用户的语法(sugar)
class GeneratedElement {
 public:
   // ...
   int32_t num;
   // ...
};


class GeneratedMap {
 public:
   // ...
   std::map<int32_t, GeneratedElement>  myGeneratedMap;
   // ...
};

// End of generated code
class Element {
 public:
   GeneratedElement* pGenerated; // <<== ptr into element of another std::map!
   time_t lastAccessTime;
};


class MapWrapper {
private:
  GeneratedMap theGenerated; 

 public:
   // ...
   std::map<int32_t, Element>  myMap;
   // ...

   void doStuffWIthBoth(int32_t key)
   {
     // instead of 
     //   theGenerated.myGeneratedMap[key].num++;  [lookup in map #1]
     //   time(&myMap[key].lastAccessTime);        [lookup in map #2]
     Element& el=myMap[key];
     el.pGenerated->num++;
     time(&el.lastAccessTime);
   }
};