【发布时间】:2014-03-07 15:18:20
【问题描述】:
例如,我有一个班级:
class A
{
enum {N = 5};
double mVariable;
template<class T, int i>
void f(T& t)
{
g(mVariable); // call some function using mVariable.
f<T, i+1>(t); // go to next loop
}
template<class T>
void f<T, N>(T& t)
{} // stop loop when hit N.
};
函数模板中不允许部分特化。我该如何解决这个问题?
我稍微改变了 Arne Mertz 的例子,比如:
template<int n>
struct A
{
enum {N = n};
...
};
并使用 A like:
A<5> a;
我无法在 Visual Studio 2012 上编译。是编译器错误还是其他原因?这很奇怪。
编辑:已选中。这是一个 Visual Studio 错误。 :(
我认为 Nim 提供了最简单的实现方式。
【问题讨论】:
-
您不使用
for循环的任何原因? -
I tried the templated version on gcc 它编译得很好。您甚至可以完全保留枚举并将
N本身作为模板参数。 -
使用形参
t有什么意义? -
@Constructor 是模板参数T类型。比如可以把A的内容写到不同类型的变量t中。
-
@user1899020 用在什么地方?
标签: c++ templates template-specialization