作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在其子类中专门化非模板类的模板方法:
//.h文件
class MyWriter {
public:
template<typename T>
void test(const T & val) {
std::cout << val << "\n";
}
};
//.cpp 文件
class MyType {
public:
MyType(int aa, double dd) : a(aa), d(dd) {}
int a;
double d;
};
class MyWriterExt : public MyWriter {
public:
template<> void test(const MyType &val) {
test(val.a);
test(val.d);
}
};
int main() {
MyWriterExt w;
w.test(10);
w.test(9.999);
w.test(MyType(15, 0.25));
return 0;
}
但是我收到一个错误:
Error 1 **error C2912**: explicit specialization;
'void MyWriterExt::test(const MyType &)' is not a specialization of a function
template \testtemplate.cpp 30
如何扩展 MyWriter 类以支持用户定义的类?
最佳答案
特化应该针对同一个类而不是子类,也应该在类主体之外进行:
class MyWriter {
public:
template<typename T>
void test(const T & val) {
std::cout << val << "\n";
}
};
template<>
void MyWriter::test<MyType>(const MyType & val) {
test(val.a);
test(val.d);
}
您不需要子类来专门化原始成员函数模板。
同时考虑 overloading而不是特化。
关于c++ - 如何在子类(C++)中专门化模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176951/
我是一名优秀的程序员,十分优秀!