是否可以使用元编程将所有常规编程任务转换为编译时间?

Cha*_*han 4 c++ metaprogramming

我读到了关于元编程的内容,发现它非常有趣.例如,检查数字是否为素数,计算斐波那契数...我对其实际用法感到好奇,如果我们可以将所有运行时解决方案转换为元编程,那么应用程序的执行效果会更好.让我们说找到一个数组的最大值.如果没有排序,我们将在运行时采用O(n).是否可以通过元编程获得O(1)?

谢谢,

In *_*ico 5

你不能因为元编程只适用于编译时已知的输入.因此,您可以使用一个元函数来计算斐波纳契数,给定编译时已知的常数:

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++模板元编程的(高级)书.


Moo*_*ice 5

如果在您点击编译按钮时不知道,则元编程将无法解决.