以下示例应说明我的问题:如果我有一个类作为模板参数,我该如何使用该类的(常量)属性...
直接,如标有(1)的行所示。我所知道的, 这应该工作。这是"对"方式是什么?
作为模板专业化的参数。因此,我想将其中一个Container专门用于固定,而另一个用于未修复。在这里,我不知道。
代码示例:
class IdxTypeA{
const bool fixed = true;
const int LEN = 5; // len is fixed on compile time
}
class IdxTypeB{
const bool fixed = false;
int len; // len can be set on runtime
}
class IdxTypeC{
const bool fixed = false;
int len; // len can be set on runtime
}
template<class IDX> class Container { }
template<>
class Container<here comes the specialisation for fixed len>{
int values[IDX.LEN]; // **** (1) *****
}
template<>
class Container<here comes the specialisation for not fixed length>{
...
}
(问题不在于容器,它只是粗略的例子。)
答案 0 :(得分:1)
首先,您需要将编译时属性转换为实际的常量表达式,方法是static
:
class IdxTypeA {
static const bool fixed = true;
static const int LEN = 5; // len is fixed on compile time
}
有了这个,你可以(部分)专注于这些就好了,有点像这样:
template<class IDX, bool IS_FIXED = IDX::fixed> class Container;
template <class IDX>
class Container<IDX, true>
{
int values[IDX::LEN];
};
template <class IDX>
class Container<IDX, false>
{
};