Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <utility>
- #include <tuple>
- #include <type_traits>
- template <typename ...Args>
- class PackClass
- {
- protected:
- using Tuple = std::tuple<Args...>;
- private:
- Tuple m_values;
- protected:
- template <size_t I = 0, typename... Ts>
- typename std::enable_if<I == sizeof...(Ts), void>::type
- walkValues(std::tuple<Ts...> tuple)
- {
- }
- template <size_t I = 0, typename... Ts>
- typename std::enable_if<(I < sizeof...(Ts)), void>::type
- walkValues(std::tuple<Ts...> tuple)
- {
- auto value = std::get<I>(tuple);
- /* SOME ACTION */
- std::cout << value << std::endl;
- walkValues<I + 1>(tuple);
- }
- public:
- PackClass(Args... values) :
- m_values(values...)
- {
- }
- template <typename Arg>
- PackClass<Args..., Arg> Append(Arg value)
- {
- return std::make_from_tuple<PackClass<Args..., Arg>>(
- std::tuple_cat(
- m_values,
- std::make_tuple(value)
- )
- );
- }
- size_t Count() const
- {
- return std::tuple_size<Tuple>{};
- }
- auto Fetch()
- {
- return walkValues(m_values);
- }
- };
- int main()
- {
- PackClass{ 3, std::string("TestString"), 'c' }
- .Append(3.5)
- .Append("XYZ")
- .Fetch();
- /*auto result = */;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement