Я не уверен, что это возможно, но есть ли способ, используя магию программирования шаблонов, определить функцию, которая имеет различные возвращаемые значения в зависимости от того, какой ввод требуется?
Потенциально:
template<typename resultType>
resultType GetResult(const std::string &key); // where the value of key may change resultType
template<typename keyType, typename resultType>
resultType GetResult(keyType key);
Теперь я знаю, что вышеприведенное неверно.Чтобы использовать первый, вы должны знать, что было resultType
перед вызовом функции.Тем не менее, я узнал, что многие «невозможные» вещи часто становятся возможными только с помощью другого (или двух) уровня косвенности.Кажется, я просто не могу найти правильный способ сделать это.
Хотя второй вариант щекочет мне мозг.Я чувствую, что должен быть в состоянии определить какой-то другой вспомогательный объект, который отображает строки в типы (или что-то еще), а затем результат компиляции этого времени вызовет GetResult
с соответствующим параметром шаблона.
Редактировать:Предположим, что типы, используемые для resultType
, не связаны.Нет интерфейса, который можно было бы проверить на «настоящий» тип (возможно, это может быть int
и MyClass *
).
Редактировать 2: Реальное использование заключается в том, что яполучил сторонний объект, который содержит коллекцию виджетов, гаджетов и т. д. Вы можете запросить их по строковому идентификатору (удобно с префиксом типа), но вам нужно проанализировать строку, чтобы выяснить, что вам нужно вызвать "collectionInstance.getWidget (идентификатор)».Мой план состоял в том, чтобы написать тонкий объект-обертку, который разумно знал бы, как добраться до этих внутренних объектов.