#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <list>
#include <unordered_set>
#include <functional>
#include <queue>
using namespace std;
namespace _nmsp1
{
class B
{
public:
};
class A
{
public:
B b;
};
template<typename...Args> class myclasst {
};
template<> class myclasst<>
{
public:
myclasst()
{
printf("myclasst<>::myclasst()执行了,this = %p\n", this);
}
};
template <typename First,typename... Others>
class myclasst<First, Others...>
{
public:
myclasst() :m_i(0)
{
printf("myclasst::myclasst()执行了,this = %p\n", this);
}
myclasst(First parf, Others...paro) :m_i(parf), m_o(paro...)
{
cout << "-------------------begin----------------" << endl;
printf("myclasst::myclasst(parf,paro)执行了,this = %p\n", this);
cout << "m_i=" << m_i << endl;
cout << "-------------------end------------------" << endl;
}
First m_i;
myclasst<Others...> m_o;
};
void func()
{
myclasst<int, float, double> myc(12, 13.5f, 23);
}
}
namespace _nmsp2
{
template<int mycount,int mymaxcount,typename...T>
class myclasst
{
public:
static void mysfunc(const tuple<T...>&t)
{
cout << "value = " << get<mycount>(t) << endl;
myclasst<mycount + 1, mymaxcount, T...>::mysfunc(t);
}
};
template <int mymaxcount,typename...T>
class myclasst< mymaxcount, mymaxcount, T...>
{
public:
static void mysfunc(const tuple<T...>&t)
{
}
};
template <typename...T>
void myfunct(const tuple<T...>&t)
{
myclasst<0, sizeof...(T), T...>::mysfunc(t);
}
void func()
{
tuple<float, int, int> mytuple(12.5f, 100, 52);
myfunct(mytuple);
}
}
namespace _nmsp3
{
template <
typename T,
template<typename W> typename Container
>
class myclass
{
public:
T m_i;
Container<T> myc;
myclass()
{
for(int i = 0; i < 10; ++i)
{
myc.push_back(i);
}
}
};
template<typename T> using MYVec = vector<T, allocator<T>>;
template<typename T> using MYList = list<T, allocator<T>>;
void func()
{
myclass<int, MYVec> myvecobj;
myclass<int, MYList> mylistobj;
}
}
int main()
{
_nmsp3::func();
return 1;
}