프로그래밍/C,C++
타입에 따른 템플릿 오버로딩
MAKGA
2024. 1. 10. 17:50
320x100
template<typename T>
std::enable_if_t<std::is_same_v<T, const char*> || std::is_same_v<T, const char* const>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
String(_value);
}
template<typename T>
std::enable_if_t<std::is_same_v<T, std::string>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
String(_value.c_str());
}
template<typename T>
std::enable_if_t<std::is_same_v<T, bool>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
Bool(_value);
}
template<typename T>
std::enable_if_t<std::is_same_v<T, int8_t> || std::is_same_v<T, int16_t> || std::is_same_v<T, int32_t>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
Int(_value);
}
template<typename T>
std::enable_if_t<std::is_same_v<T, uint8_t> || std::is_same_v<T, uint16_t> || std::is_same_v<T, uint32_t>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
Uint(_value);
}
template<typename T>
std::enable_if_t<std::is_same_v<T, int64_t>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
Int64(_value);
}
template<typename T>
std::enable_if_t<std::is_same_v<T, uint64_t>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
Uint64(_value);
}
template<typename T>
std::enable_if_t<std::is_floating_point_v<T>, void>
AddField(const char* _key, const T& _value)
{
Key(_key);
Double(_value);
}
void AddFields() {}
template<typename Key, typename Value, typename... Rest>
void AddFields(Key&& _key, const Value& _value, const Rest&... _rest)
{
AddField(_key, _value);
AddFields(_rest...);
}
320x100