已经提出了许多问题,它们与我在这里要问的问题相似,但我认为它们并不相同。
我有一个模板类:
namespace app {
template <typename T>
class MyCLass {
public:
void dosome();
void doother();
}
} /*ns*/
和实现:
template <typename T>
app::MyClass<T>::dosome() {}
template <typename T>
app::MyClass<T>::doother() {}
当我有一个char
作为模板参数提供的类的实例时,我希望函数dosome()
以完全不同的方式运行。但我只是希望该功能表现不同,其他一切都必须保持相同。
我试着输入:
template<>
app::MyCLass<char>::dosome() {
}
但是编译器告诉我我正在尝试在不同的命名空间中创建一个专业化。
所以当我有这样的代码时:
app::MyCLass<int> a;
app::MyCLass<char> b;
a.dosome(); // This must call the generic template definition
b.dosome(); // This must call the specialization
a.doother(); // This must call the generic template definition
b.doother(); // This must call the generic template definition
在其他问题中,我看到人们为整个班级创造了完全不同的专业。但我只想要一种方法的专业化。