我有下面的方法獲取C風格結構的向量並一次處理其元素。在運行時獲取模板類型
我希望擴展它來接收更多類型的結構而不需要重複我的代碼。
由於所有類型的結構都將包含相同的字段名稱,因此使用模板實現此新需求將是最優雅的。
但是,我不能決定如何將第二個參數傳遞給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);
}
我想過增加枚舉值的結構數據中每個實例作爲恆定的,但我希望能找到一個更好的辦法,也不會要求改變我的基本結構形式。
是的,這是更優雅(和C++標準類庫)的方式來做到這一點:不像我的解決方案,它不污染'A'類。加一。 – Bathsheba
我會避免特性/政策中**值**的名稱'type'。 – Jarod42
但這不適用於運行時!如果矢量由基本策略類專門化並且包含派生的策略子類型...模板將只接收其矢量的特化的特徵 – barney