具有多个模板参数的模板专业化
假设我有这个:
template<typename T, int X>
class foo
{
public:
void set(const T &t);
};
template<typename T, int X>
void foo::set<T, X>(const T &t)
{
int s = X;
// ...etc
}
我可以专门化函数类型“T”但将“X”保留为模板参数吗?
class bar;
template<int X>
void foo::set<bar, X>(const bar &t)
{
int s = X;
// ...etc
}
这可能吗?
Say I have this:
template<typename T, int X>
class foo
{
public:
void set(const T &t);
};
template<typename T, int X>
void foo::set<T, X>(const T &t)
{
int s = X;
// ...etc
}
Could I specialize the function type 'T' but leave 'X' as a template parameter?
class bar;
template<int X>
void foo::set<bar, X>(const bar &t)
{
int s = X;
// ...etc
}
Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
一旦掌握了窍门,这就会非常容易。
这是必要的,因为如果您显式专门化单个成员,则必须提供所有模板参数。你不能留下一些。
This is surprisingly easy once you get the hang of it
This is necessary because if you explicitly specialize a single member, you must provide all template arguments. You cannot leave some off.
您可以考虑重写代码以使成员函数成为单独的模板:
然后您可以为模板
foo::set
提供显式特化。You could consider rewriting your code to make the member function a separate template:
Then you can provide explicit specializations for the template
foo<X>::set
.不,这是不允许的。
类
成员函数必须完全专门化。例如,应该是,No. That is not allowed. A
class
member function must be fully specialized. For example, it should be,您可以对整个课程进行部分专业化。在这种情况下,您可以为类的每个专门化提供
set
函数的不同实现。You can partially specialize the whole class. In this case you can give different implementations to the
set
function for every specialization of the class.