类型萃取与特化
输出类型名称
#include <cxxabi.h> std::cout<<abi::__cxa_demangle(typeid(Sum<std::vector<uint64_t> >).name(),NULL, NULL, NULL)<< std::endl;
函数模板变长参数
终止函数需要写在递归函数之前
void print() { return; }
template <typename T, typename... Args>
void print(T head, Args... rest) {
std::cout << head << std::endl;
print(rest...);
}
复杂模板语法
//c++ template
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
template <typename... Elem>
class EventQueue {
public:
EventQueue();
~EventQueue();
void test();
template <typename... Args>
void Func();
};
template <typename... Elem>
EventQueue<Elem...>::EventQueue() {
cout << __FUNCTION__ << endl;
};
template <typename... Elem>
void EventQueue<Elem...>::test() {
cout << __FUNCTION__ << endl;
}
template <typename... Elem>
EventQueue<Elem...>::~EventQueue() {
cout << __FUNCTION__ << endl;
}
template <typename... Elem>
template <typename... Args>
void EventQueue<Elem...>::Func() {
cout << __FUNCTION__ << endl;
}//模版类中的模板函数
int main() {
EventQueue<int, int, int> w;
w.test();
w.Func<int, int, char, double*>();
return 0;
} 


京公网安备 11010502036488号