Понятно, что функции не могут быть как шаблонами, так и виртуальными. Но там может быть супер умный шаблон дизайна, который будет делать.C++ virtual templated function
Моя цель состоит в том, чтобы иметь функцию, которая выглядит следующим образом:
void configure(const Configuration &config){
double stuff = config.get<double>("stuff");
int thing = config.get<int>("thing");
// rest of the code
}
В идеале, я мог бы передать различные объекты конфигурации, например, объект, который читается из файла или из базы данных.
Здесь (раздели до минимума) пример конкретного класса конфигурации с помощью YAML-CPP (я думаю, понятно, даже если вы не знаете, YAML-CPP):
class YAML_config : public Configuration {
public:
YAML_config(std::string file_path){
this->node = YAML::LoadFile(file_path);
}
template<typename T> T get(std::string key){
return this->node[key].as<T>();
}
private:
YAML::Node node;
Вопрос: что будет подходящий код для конфигурации класса?
Вот некоторые неверный код, который показывает намереваюсь:
class Configuration {
virtual template<typename T> T get(std::string key)=0;
}
Если все это просто плохое начало, любой другой подход, я должен смотреть в? Я проверил «стирание типа», но это, похоже, не помогло (или я что-то пропустил?)
Возможно, у вас может быть защищенная виртуальная функция без шаблона, которая возвращает 'boost :: any', а затем делает функцию' get' template не виртуальной и выполняет листинг там? – TartanLlama
Полностью не связан с вопросом .... Но почему вы проходите в shared_ptr? – rubenvb
@TartanLlama звучит многообещающе ... любой шанс, который вы бы уточнили :)? – Vince