C++模板元编程初步

C++模板元编程初步

  • 简介
  • C++组态

简介

参数推导
偏特化

C++组态

  1. 模板里的静态成员变量
template
class testclass
{
public:
	static int _data;
};
template int testclass::_data = 10;

int main()
{
	std::cout << testclass::_data << std::endl;  // >> 10
	return 0;
}
  1. 模板类特化
template
struct testclass2
{
	testclass2() { std::cout << "I,O" << std::endl; }
};
template
struct testclass2
{
	testclass2() { std::cout << "T*,T*" << std::endl; }
};
template
struct testclass2
{
	testclass2() { std::cout << "const T*,T*" << std::endl; }
};
int main()
{
	// 组态: 特殊化设计
	testclass2 obj1;                       // >> I,O
	testclass2 obj2;                      // >> T*,T*
	testclass2 obj3;                // >> const T*,T*
	return 0;
}
  1. 成员函数模板
class my_alloc{};

template
class my_vector
{
public:
	typedef T value_type;
	typedef value_type* iterator;

	template
	void insert(iterator pos, I first, I last)
	{
		std::cout << "insert()" << std::endl;
	}
};
int main()
{
	// 组态: 类成员函数模板
	int ia[5] = { 0,1,2,3,4 };
	my_vector x;
	my_vector::iterator ite = nullptr;
	x.insert(ite, ia, ia + 5);
	return 0;
}
  1. 根据前一个模板参数设定下一个模板参数
class alloc {};

template
class deque 
{
public:
	deque() { std::cout << "deque" << std::endl; }
};

template>
class stack
{
public:
	stack() { std::cout << "stack()" << std::endl; }
private:
	Sequence c;
};


int main()
{
	// 组态: 根据前一个模板参数设置下一个模板参数
	stack y;
	return 0;
}

你可能感兴趣的:(C++模板编程,C++,模板元编程)