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(); }
副作用是我们要把本来栈上分配的数组要变成堆上动态分配,而且还要记得析构时释放内存。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。