I have the following two functions that I use to convert std containers to strings for logging purposes.
template <typename TCollection, std::string(*ToStringFunc)(typename TCollection::value_type)>
std::string LOG_COLLECTION(const TCollection& collection)
{
std::string as_str;
for (const auto& element : collection)
{
as_str += ToStringFunc(element) + " ";
}
return as_str;
}
template <typename TCollection>
std::string LOG_COLLECTION(const TCollection& collection)
{
return LOG_COLLECTION<TCollection, std::to_string>(collection);
}
I want a specialization for containers of std::strings. Something like the following:
template <typename TCollection<std::string>>
std::string LOG_COLLECTION(const TCollection<std::string>& collection)
{
std::string as_str;
for (const auto& element : collection)
{
as_str += ToStringFunc(element) + " ";
}
return as_str;
}
int main()
{
std::vector<std::string> vec{ "a", "b", "c" };
std::string as_str = LOG_COLLECTION(vec)
}
How do I do that (I am using c++11)? I tried to search the web but did not find a solution.