Как я могу перебирать список типов без создания экземпляра каждого типа?Итерация через список типов
В моем примере у меня есть родительский класс с методом getByName
, который возвращает экземпляр дочернего класса. Метод getByName
полностью разрушен, так как вы не можете создать массив typedefs. Каков наилучший способ сделать эту работу?
Одним из решений является создание массива указателей name
, но это будет беспорядочно, если есть несколько переменных (больше, чем просто name
), с которыми я хочу проверить.
Я в основном хочу чистое решение, которое использует цикл, а не ряд утверждений if.
#include <string>
struct Number {
Number(const std::string &name) :name(name) {}
// fix me!
static Number* getByName(const std::string &name) {
typedef types[] = {
One,
Two,
Three,
}
for (int i = 0; i < 3; ++i) {
if (name == types[i]::name)
return new types[i]();
}
return nullptr;
}
const std::string name;
};
struct One :Number {
One() :Number(name) {}
const static std::string name;
};
struct Two :Number {
Two() :Number(name) {}
const static std::string name;
};
struct Three :Number {
Three() :Number(name) {}
const static std::string name;
};
const std::string One::name = "one";
const std::string Two::name = "two";
const std::string Three::name = "three";
Я рекомендую использовать структуру имен и указателей функций; или 'std :: map' с именем в качестве ключа и указателем функции в качестве значения. –
Поиск в StackOverflow или в Интернете для «заводской реализации C++». –