Jonhathan Wakely , , , , , AddStrings. , , :
#include <iostream>
template <typename StreamType = std::ostream, StreamType& stream = std::cout>
class StringList {
template <typename, typename...> struct AddStrings;
public:
template <typename... Args> void addStrings (Args&&... args) {AddStrings<void, Args...>()(args...);}
};
template <typename StreamType, StreamType& stream>
template <typename T, typename First, typename... Rest>
class StringList<StreamType, stream>::AddStrings<T, First, Rest...> : AddStrings<T, Rest...> {
public:
void operator()(First&& first, Rest&&... rest) {
std::cout << first << ' ';
AddStrings<T, Rest...>::operator()(std::forward<Rest>(rest)...);
}
};
template <typename StreamType, StreamType& stream>
template <typename Dummy>
class StringList<StreamType, stream>::AddStrings<Dummy> {
public:
void operator()() const {}
};
int main() {
StringList<> stringList;
stringList.addStrings ("dog", "cat", "bird");
}