【发布时间】:2010-04-28 02:10:06
【问题描述】:
模板函数特化的通常定义是这样的:
class Foo {
[...]
};
namespace std {
template<>
void swap(Foo& left, Foo& right) {
[...]
}
} // namespace std
但是,当专门化的类型本身就是模板时,如何正确定义专门化?这是我得到的:
template <size_t Bits>
class fixed {
[...]
};
namespace std {
template<size_t Bits>
void swap(fixed<Bits>& left, fixed<Bits>& right) {
[...]
}
} // namespace std
这是声明swap 的正确方式吗?它应该是模板函数std::swap 的特化,但我不知道编译器是否这样看待它,或者它是否认为它是它的重载或其他什么。
【问题讨论】:
-
对不起,我相信你在这个上弄错了。命名空间 std 中明确允许模板函数的特化。
-
你是对的“程序可以将任何标准库模板的模板特化添加到命名空间 std。”谢谢你让我检查。