На рабочем месте я работаю над продуктом, который понимает типы во время выполнения. Появилась задача, которая требует, чтобы я прочитал эти типы и сохранил их в классе C++ на основе того, какой конструктор вызывается. До сих пор я дал мысль о std::tuple
, переменных числе шаблонов и std::vector
из boost::any
и я мог бы придумать что-то вродеСоздание экземпляра конструктора на основе времени выполнения
class Storage
{
private:
std::tuple<int,float,std::string> ti;
public:
Storage(....);
Storage(....);
.... // constructors for all the combinations
};
У нас есть внутренний API, который может сказать мне о том, сколько типов поставляются во время выполнения , однако проблема заключается в том, что я не знаю, каким образом будут поставляться элементы, т. е. может быть только один тип или более одного или всех трех и так далее.
Как таковой, я получаю большой блок блокировки коммутатора, где я проверяю возможности для всех входов (например, 1 тип, 2 типа и 3 типа).
Есть ли способ решить это? По некоторым шаблонам мета-программирования магии, что в конце концов я могу уйти от этого большого коммутационного футляра и просто предоставить один конструктор и дать возможность компилятору создать экземпляр конструктора на основе ввода.
Я прошел через this и this вопрос, но я не мог понять, как он подходит для моего использования.
Ваша проблема заключается в порядке аргументации для построения 'ti'? – Jarod42
Ваш вопрос непонятен; не могли бы вы описать, какой вход вы можете получить, и соответствующий результат, который вы ожидаете: псевдокод в порядке, но опишите ваше * намерение *. Кроме того, похоже, существует смешение вопросов: тип и количество элементов, которые решаются во время выполнения, являются ортогональными. Решение проблемы типа является сложной, в то время как время выполнения является равным для курса для 'vector'. –
Поиск в Интернете для «фабрики программного обеспечения» или «отправки программного обеспечения». –