Json::Value
에서
T
및
T
에서
Json::Value
에 변환을 정의 할
템플릿 전문를 작성할 수
JsonCpp를 래핑
a library 만드는거야
. 그것은 작동하지만 전문화 구문은 매우 우아하지 않으므로 반복하지 않아도됩니다. 내가 알않도록 반복
namespace ssvuj // my library's namespace
{
namespace Internal
{
template<> struct FromJson<sf::Color>
{
inline static sf::Color conv(const Obj& mObj)
{
return sf::Color(as<float>(mObj, 0), as<float>(mObj, 1), as<float>(mObj, 2), as<float>(mObj, 3));
}
};
template<> struct ToJson<sf::Color>
{
inline static Obj conv(const sf::Color& mValue)
{
Obj result;
set(result, 0, mValue.r);
set(result, 1, mValue.g);
set(result, 2, mValue.b);
set(result, 3, mValue.a);
return result;
}
};
}
}
// example usage
ssvuj::Obj objColor; // this Json object contains sf::Color data
ssvuj::Obj objEmpty; // this Json object is empty
sf::Color colorFromObj{ssvuj::as<sf::Color>(objColor)}; // color is initialized by "deserializing" the Json object
ssvuj::set(objEmpty, colorFromObj); // the color is "serialized" into the empty Json object
문제 : 다음
는 현재 변환을 정의 할 수있는 방법
이 경우- 유형의 반복,
sf::Color
- 구조체 전문화 사용의 필요성
static void
(전문 기능을 시도했지만T = std::vector<T>
과 같은 부분 특수화에는 작동하지 않음)
이 덜 장황하고 더 우아하게 만들 수있는 유일한 방법은 매크로이지만, 전처리기를 사용하지 않고도 할 수있는 일이있을 것입니다. 아이디어?
왜 변환이 아닌'fromJson'와'toJson' 기능을 제공하는 하나의 유형에 대한 두 가지 유형시겠습니까? 또는 지원하려는 유형에 대해 전문화가 아닌 오버로드를 사용할 수 있습니다 ... ADL을 동시에 활성화하면 사용자 코드가 훨씬 더 간단 해집니다. –
struct가 'static void'함수를 사용하여 어디에 있습니까? – Walter
@ DavidRodríguez-dribeas : 당신 말이 맞아요. 단일 변환기 ''구조체로는 훨씬 더 좋을 것 같습니다. 나는 그것을 시험해 볼 것이고, 내가 만족 스럽다면 당신에게 알려 주어 내가 받아 들일 수있는 대답을 게시 할 수있게 할 것이다. –