所以在我的.h文件中我有
template <class T>
void getValue(T *val, int element, int index);
然后在我的.cc文件中我有一个函数:
template <class T>
void RParser::getValue(T *val, int element, int index)
{
我也明确地实例化了它:
template void RParser::getValue<char>(char *val, int element, std::string subrecName);
template void RParser::getValue<long long>(long long *val, int element, std::string subrecName);
template void RParser::getValue<float>(float *val, int element, std::string subrecName);
...
这有效,但我想为std :: string
创建一个完全不同的函数我试过了:
template <class std::string>
void RParser::getValue<std::string>(std::string * val, int element, int index)
{
但这没效果。
非常感谢任何建议,
谢谢, 约什
答案 0 :(得分:4)
根本不要使用模板 - 只是一个普通的功能:
void RParser::getValue(std::string * val, int element, int index)
{
}
答案 1 :(得分:2)
如果要专门化模板,则语法为:
template<>
void RParser::getValue<std::string>(std::string* val, int element, int index) {}
但正如尼尔的回答所说,你不需要专门化这个功能模板;过载将完成这项工作:
void RParser::getValue(std::string* val, int element, int index) {}
答案 2 :(得分:1)
专门化一个类的模板成员函数是非法的C ++。我认为在C ++ 00x中这已经放松了。强调文本
编辑:
class foo {
template <typename T> T bar(const T & t){
return t;
}
template <> int bar<int>(const int & t){
return t + 1 ;
}
};
int main(int c, const char * v[]){
foo f;
}
编译时
% gcc /tmp/foo.cpp
/tmp/foo.cpp:6: error: explicit specialization in non-namespace scope ‘class foo’
/tmp/foo.cpp:6: error: template-id ‘bar<int>’ in declaration of primary template