프로그래밍/C,C++

[RapidJson] 가변 파라미터 함수로 json 값 추가하기

MAKGA 2023. 5. 8. 22:48
320x100
// rapidjson/writer.h

template<typename T>
void WriteJsonValue(const char* key, T value);

// WriteJsonValue for const char* values
template<>
void WriteJsonValue(const char* key, const char* value)
{
	Key(key);
	String(value);
}

// WriteJsonValue for bool values
template<>
void WriteJsonValue(const char* key, bool value) {
	Key(key);
	Bool(value);
}

// WriteJsonValue for integral types
template<>
void WriteJsonValue(const char* key, char value)
{
	Key(key);
	Int(value);
}

template<>
void WriteJsonValue(const char* key, unsigned char value)
{
	Key(key);
	Uint(value);
}

template<>
void WriteJsonValue(const char* key, short value)
{
	Key(key);
	Int(value);
}

template<>
void WriteJsonValue(const char* key, unsigned short value)
{
	Key(key);
	Uint(value);
}

template<>
void WriteJsonValue(const char* key, int value)
{
	Key(key);
	Int(value);
}

template<>
void WriteJsonValue(const char* key, unsigned int value)
{
	Key(key);
	Uint(value);
}

template<>
void WriteJsonValue(const char* key, __int64 value)
{
	Key(key);
	Int64(value);
}

template<>
void WriteJsonValue(const char* key, unsigned __int64 value)
{
	Key(key);
	Uint64(value);
}

template<>
void WriteJsonValue(const char* key, float value)
{
	Key(key);
	Double(value);
}

// WriteJsonObject function declaration
template<typename... Args>
void WriteJsonObject(Args... args);

// WriteJsonObject variadic template function
template<typename T, typename... Args>
void WriteJsonObject(const char* key, T value, Args... args)
{
	WriteJsonValue(key, std::forward<T>(value));
	WriteJsonObject(std::forward<Args>(args)...);
}

void WriteJsonObject() {}

 

// 사용 예시
// example.cpp

rapidjson::StringBuffer sb;
rapidjson::Writer writer(sb);

writer.WriteJsonObject("key", value, "key2", "value");

 

 

여기서 좀 더 개선한다면 int64, unsigned int64 타입을 제외하곤 정수형 타입 특화 함수로 통일해도 될 것 같다.

320x100

'프로그래밍 > C,C++' 카테고리의 다른 글

타입에 따른 템플릿 오버로딩  (1) 2024.01.10
UTF-8 문자열 관리  (0) 2023.10.12
확인할 수 없는 외부 기호  (0) 2021.12.30
memmove_s 함수  (0) 2021.12.27
C2143 구문 오류: ';'이(가) '*'앞에 없습니다.  (0) 2021.12.20