заюзай джейсон и не еби мозги (препод в шоке будет от твоей продвинутости)
знаете, что надо было сделать?
просто создать мапу std::map <std::string, std::pair<std::string, std::string>>
где first.first - название секции
second.first - название аргумента
second.second - значение аргумента (храним как стринг изначально)
и реализовать методы приведения к тому типу, который задается из консоли, то есть, пользователь хочет получить значение какого-то аргумента в некой секции в целых числах, наш метод либо кидает исключение, если не может привести значение в целое, либо соотственно выдает ему его значение