#include <cstdio>
#include <iostream>
using namespace std;
struct A {
A() {}
A(const A& a) { cout << "COPY Constructed " << __FUNCTION__ << endl; }
A(A&& a) { cout << "Move Constructed " << __FUNCTION__ << endl; }
};
struct B {
B() {}
B(const B& b) { cout << "COPY Constructed " << __FUNCTION__ << endl; }
B(B&& b) { cout << "Move Constructed " << __FUNCTION__ << endl; }
};
template<typename... T> struct MultiTypes;
template<typename T1,typename... T>
struct MultiTypes<T1, T...> :public MultiTypes<T...> {
T1 t1;
MultiTypes<T1, T...>(T1 a,T... b):
t1(a), MultiTypes<T...>(b...) {
cout << "MultiTypes<T1,T...>(T1 a,T... b)" << endl;
}
};
template<> struct MultiTypes<> {
MultiTypes<>() { cout << "MultiTypes<>()" << endl; }
};
template<template<typename...>class VariadicType, typename... Args> VariadicType<Args...> Build(Args&&... args) {
return VariadicType<Args...>(std::forward < Args>(args)...);
}
int main()
{
A a;
B b;
Build<MultiTypes>(a, b);
return 0;
}
变长模板实现完美转发
最新推荐文章于 2022-03-08 17:14:30 发布