C++ 是否可以为具有非类型参数的模板类型部分专门化模板

C++ 是否可以为具有非类型参数的模板类型部分专门化模板,c++,templates,partial-specialization,C++,Templates,Partial Specialization,我认为问这个问题最简单的方法是首先给出代码示例(我也在ideone上提供了它:): 模板 结构边界 { 静态constexpr IntType MIN=MIN_VAL; 静态constexpr IntType MAX=MAX_VAL; IntType值; }; 模板结构转换; 模板 结构值 { //对于这个例子来说毫无意义 void convert() { ConversionTraits::convert(); } T值; }; //例如,这种“实现”也是毫无意义的 结构转换impl { 静态

我认为问这个问题最简单的方法是首先给出代码示例(我也在ideone上提供了它:):

模板
结构边界
{
静态constexpr IntType MIN=MIN_VAL;
静态constexpr IntType MAX=MAX_VAL;
IntType值;
};
模板结构转换;
模板
结构值
{
//对于这个例子来说毫无意义
void convert()
{
ConversionTraits::convert();
}
T值;
};
//例如,这种“实现”也是毫无意义的
结构转换impl
{
静态void convert(){}
};
模板结构转换控件:public ConvertImpl{};
//这是我的问题。我如何部分地专注于那些已经
//常量作为模板参数。
模板
结构转换控件
{
静态void convert(){}
};
int main()
{
价值观;
intval.convert();
价值观;
value.convert();
}
正如评论中所指出的,我不知道如何专门处理
BoundInt的
ConversionTraits
编译器(gcc 4.7)告诉我,对于
BoundInt
的参数2和3,它期望一个类型为
IntType
的常量,这是有意义的。我不知道如何进行专业化,甚至不知道这是否可能

如果不可能,我可以采取不同的方法吗?

那么:

template <typename IntType, IntType MIN_VAL, IntType MAX_VAL>
struct ConversionTraits< BoundInt<IntType, MIN_VAL, MAX_VAL> >
{
    static void convert() {}
};
模板
结构转换控件
{
静态void convert(){}
};
它看起来可能是上下文向导,因为普通的
ConversionTraits
模板只有1个参数,而专门化有3个参数


但是,template
BoundInt
有三个参数,所以如果不想指定它们,就必须为每个参数使用一个模板参数。

!实际上,我确实在实际代码中尝试过这样的专业化,但我显然在某些地方犯了一个小错误。多亏了这一点,我可能不会再沿着这条路走下去了,也不会永远尝试其他一切:)
template <typename IntType, IntType MIN_VAL, IntType MAX_VAL>
struct ConversionTraits< BoundInt<IntType, MIN_VAL, MAX_VAL> >
{
    static void convert() {}
};