Cha*_*han 4 c++ metaprogramming
我读到了关于元编程的内容,发现它非常有趣.例如,检查数字是否为素数,计算斐波那契数...我对其实际用法感到好奇,如果我们可以将所有运行时解决方案转换为元编程,那么应用程序的执行效果会更好.让我们说找到一个数组的最大值.如果没有排序,我们将在运行时采用O(n).是否可以通过元编程获得O(1)?
谢谢,
陈
你不能因为元编程只适用于编译时已知的输入.因此,您可以使用一个元函数来计算斐波纳契数,给定编译时已知的常数:
int value = Fibonacci<5>::Value;
Run Code Online (Sandbox Code Playgroud)
但它不适用于用户在运行时输入的值:
int input = GetUserInput();
int value = Fibonacci<input>::Value; // Does not compile
Run Code Online (Sandbox Code Playgroud)
当然,每次获得新值时都可以重新编译程序,但这对于非平凡的程序来说变得不切实际.
请记住,C++中的元编程基本上是对C++处理模板的方式的"有用的偶然滥用".模板元编程绝对不是 C++标准委员会在C++ 0x之前创建C++标准时所考虑的.你只能推动编译器这么多,直到你得到内部编译器错误(现在已经改变了较新的编译器,但你仍然不应该过分).
如果你想看看它们真正有用的东西,那里有一本专门用于C++模板元编程的(高级)书.
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |