프로그래밍/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