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);
}
};