【发布时间】:2016-08-05 16:58:21
【问题描述】:
模板元编程的“你好,世界”可以被认为是阶乘代码:
template <unsigned int n>
struct factorial {
enum { value = n * factorial<n - 1>::value };
};
template <>
struct factorial<0> {
enum { value = 1 };
};
所以我们可以通过做得到阶乘
cout << factorial<4>::value << endl; //It will print 24
但如果我这样做:
int N = 4;
cout << factorial<N>::value << endl; //COMPILE ERROR
有没有办法给 C++ 中的模板函数动态赋值?
【问题讨论】:
-
您可以应用一些技巧。 See this post for details。 This Youtube video 还描述了一个更好的解决方案,尽管是针对不同的问题。
-
另外:由于没有充分解释的原因,很多人对这篇文章投了反对票。这个问题似乎是合法的。
-
@Xirema:如果你想在编译时评估模板,基于运行时给出的值,你需要一台时间机器。如果这不是很清楚,您不应该坐在电脑前。
-
@IInspectable 我建议您查看我提供的链接,因为您会发现这不是他们在做什么。它们只是在运行时提供对值的 O(1) 访问。
-
@Xirema:使用 O(1) 检索具有线性复杂度的函数的结果是必需的,该值无法在运行时计算。
标签: c++ templates metaprogramming template-meta-programming