C++简单模板元编程

今天想用模板元编程,网上搜了下,很多用boost::mpl实现,我自己写了个简单测试了下:

#include <iostream>
using namespace std;

template <int N = 0>
struct Test
{
	Test():num(N){

	}
	int num;
	int arr[N];

	void GetNum()
	{
		printf("%d\n", num);
	}
};

int main()
{
	Test<55> test;
	test.GetNum();
}

模板元的优点就是在编译期把事情给确定了,但是缺点是“确定性”,运行期的好处就是“不确定性”,比如模板元编程不能这样

int main()
{
	int num = 0;
	cin >> num;
	
	Test<num> test;
	test.GetNum();
}

但是我们如果修改代码后:

#include <iostream>
using namespace std;

//template <int N = 0>
struct Test
{
	Test(int N):num(N){
		arr = new int[N];
	}
	~Test(){
		delete []arr;
	}
	int num;
	int *arr;

	void GetNum()
	{
		printf("%d\n", num);
	}
};

int main()
{
	int num = 0;
	cin >> num;
	
	Test test(num);
	test.GetNum();
}

副作用是我们要把本来栈上分配的数组要变成堆上动态分配,而且还要记得析构时释放内存。

C++简单模板元编程,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。