Mam następującą metodę, która pobiera wektor struktur w stylu C i przetwarza swoje elementy pojedynczo.Uzyskiwanie typu szablonu w czasie wykonywania
Chciałbym go rozszerzyć, aby otrzymywać więcej rodzajów struktur bez powielania mojego kodu.
Ponieważ wszystkie typy struktur będą zawierały te same nazwy pól, byłoby najbardziej elegancko zastosować to nowe wymaganie przy użyciu szablonów.
Jednak nie mogę zdecydować, jak przekazać drugi argument do funkcji write_db
; ten argument, który jest typu enum per struct —, czy istnieje opcja uzyskania tego w czasie wykonywania?
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);
}
myślałem o dodanie wartość enum jako stały dla każdej instancji struct ale mam nadzieję znaleźć lepsze podejście, które nie wymagałoby zmiany mojego podstawowy format struct.
Tak, to jest bardziej elegancka (i standardowa biblioteka w stylu C++), aby to zrobić: w przeciwieństwie do mojego rozwiązania nie zanieczyszcza klasy 'A'. Plus jeden. – Bathsheba
Unikałbym nazwy "typ" dla ** wartości ** w cechach/polisie. – Jarod42
ale to nie zadziała dla środowiska wykonawczego! jeśli wektor jest wyspecjalizowany przez podstawową klasę polityki i zawiera podtypy polityk pochodnych ... szablon otrzyma tylko cechę specjalizacji tego wektora: – barney