Я пытаюсь написать шаблонный класс, используя SFINAE для преобразования из карты в json и наоборот. Идея состоит в том, чтобы ограничить класс картами, которые имеют тип целочисленного значения или могут быть преобразованы в int, то есть перечисления, но у меня возникают проблемы при компиляции моего класса.
Вот мой код:
MapToJsonConvertor.h:
#ifndef COMMON_MAPTOJSONCONVERTOR_H_
#define COMMON_MAPTOJSONCONVERTOR_H_
#include <Poco/JSON/Object.h>
#include <Poco/JSON/Parser.h>
#include <Poco/Dynamic/Var.h>
#include <Poco/JSON/Stringifier.h>
#include <map>
#include <type_traits>
template<typename T,
typename = typename std::enable_if<std::is_convertible<T, int>::value, T>::type>
class MapToJsonConvertor
{
public:
MapToJsonConvertor(const std::map<int, T> &mapFrom): mMap(mapFrom)
{}
MapToJsonConvertor(const Poco::JSON::Object::Ptr &jsonObject): mJsonObject(jsonObject)
{}
Poco::JSON::Object::Ptr Convert(const std::string &rootName);
//std::map<int, T> Convert(const Poco::JSON::Object::Ptr &jsonObject);
private:
std::map<int, T> mMap;
Poco::JSON::Object::Ptr mJsonObject;
};
#endif /* COMMON_MAPTOJSONCONVERTER_H_ */
MapToJsonConvertor.cpp
#include "MapToJsonConvertor.h"
template<typename T>
Poco::JSON::Object::Ptr MapToJsonConvertor<T>::Convert(const std::string &rootName)
{
Poco::JSON::Object::Ptr root = new Poco::JSON::Object();
Poco::JSON::Array::Ptr array = new Poco::JSON::Array();
if (!mMap.empty())
{
for (auto &elem : mMap)
{
Poco::JSON::Object::Ptr elemPtr = new Poco::JSON::Object();
elemPtr->set("key", elem.first);
elemPtr->set("value", static_cast<int>(elem.second));
array->add(elemPtr);
}
}
root->set("elements", array);
return root;
}
Полученная ошибка:
.. / src / Common / MapToJsonConvertor. cpp: 12: 83: ошибка: недопустимое использование класса неполного типа 'MapToJsonConvertor ' Poco :: JSON :: Object :: Ptr MapToJsonConvertor :: Convert (const std :: string & rootName)^
В файле, включенном из ../src/Common/MapToJsonConvertor.cpp:9:0: ../src/Common/MapToJsonConvertor.h:21:7: note: объявление класса 'MapToJsonConvertor ' классаMapToJsonConvertor ^
Я использую библиотеки Poco для сборки Json.
Я все еще новичок в метапрограммировании шаблонов с SFINAE, поэтому я был бы признателен за некоторую помощь. Что я делаю не так?