【C++】可变参数模板类的继承与偏特化展开

C++11可变参数模板

  • 环境(Windows + VS)
  • 可变参数模板是指参数不固定(0 ~ N个)的模板函数模板类
  • 基本写法:
template<class ... Args>
class A {}
// 或
template<class ... Args>
void fun(const Args&...args) {}
  • 概念的东西网上有很多。这里举一个,与实际项目中类似的例子
  • 可变模板参数类 + 继承 + 偏特化:
#include 

template<typename S, class R, class ... Args>
class A
{
public:
	A() = default;
	virtual ~A() = default;

	virtual void expand(Args ... args) {}

private:
	S value;
};

template<typename S, class R, class ... Args>
class B : public A<S, R, Args...>
{
public:
	B() = default;
	virtual ~B() = default;

	virtual void expand(Args ... args) override
	{
		std::initializer_list<int>{ (print(args), 0)... };
	}

	template <class T>
	void print(T arg){};
		

	template<>
	void print(int i)
	{
		std::cout << "int:" << i << std::endl;
	}

	template<>
	void print(double i)
	{
		std::cout << "double:" << i << std::endl;
	}
};


int main()
{
	A<int, int, int, double>* a = new B<int, int, int, double>();
	a->expand(1, 2.0);
	delete a;
	a = NULL;
	return 0;
}

你可能感兴趣的:(C++,c++,c++11,继承,可变参数模板,偏特化)