编辑代码

#include <iostream>
using namespace std;
#include <bits/stdc++.h>

template <typename ... Tail> class Tuple;

template<> class Tuple<> {};

template <typename Value, typename ... Tail>
class Tuple<Value, Tail ...> : Tuple<Tail ...> {
    Value Val;
public:
    Tuple() {}
    Tuple(Value value, Tail ... tail) : Val(value), Tuple<Tail ...>(tail ...) {
        std::cout << "value:" << value << std::endl;
    }
    Value value() { return Val; }
    Tuple<Tail ...>* next() { return this; }
};

class TestClass{

};

int test_func(int a, TestClass b) {
    return 5;
}

int main() {
    Tuple<char, double, std::string> tuple('1', 1.5, "Hello World");
    std::cout << tuple.value() << std::endl;
    std::cout << tuple.next()->value() << std::endl;
    std::cout << tuple.next()->next()->value() << std::endl;
    std::cout << typeid(decltype(test_func)).name() << std::endl;
    return 0;
}