我有一个方法,可以获取 C 风格结构体的向量,并逐个处理其元素。
我希望扩展它以接收更多类型的结构体,而不重复我的代码。
由于所有结构体类型都将包含相同的字段名称,因此使用模板来实现这个新需求最为优雅。
然而,我无法决定如何传递第二个参数给 write_db 函数;该参数是每种结构体类型的枚举,是否有任何选项可以在运行时获取它?
我希望扩展它以接收更多类型的结构体,而不重复我的代码。
由于所有结构体类型都将包含相同的字段名称,因此使用模板来实现这个新需求最为优雅。
然而,我无法决定如何传递第二个参数给 write_db 函数;该参数是每种结构体类型的枚举,是否有任何选项可以在运行时获取它?
enum policy_types {
POLICY_TYPE_A,
POLICY_TYPE_B,
...
};
// old implementation - suitable for single struct only
int policyMgr::write_rule(std::vector <struct policy_type_a> & list) {
//conduct boring pre-write check
//...
for (auto & item : list ) {
int ret = write_db(item.key1, POLICY_TYPE_A_ENUM, &item.blob);
}
//new implementation - suitable for multiple structs.
template <POLICY>
int policyMgr::write_rule(std::vector <POLICY> & list) {
for (auto & item : list ) {
int ret = write_db(item.key1, type(POLICY) /* how can i get enum according to template type */, &item.blob);
}
我考虑为每个结构体实例添加枚举值作为常量,但希望找到更好的方法,不需要改变基本结构体格式。
type
。 - Jarod42A
,它包含的是A
,而不是A
的子类型。 - molbdnilo