这是交易。我在这个论坛上看过,但是找不到要搜索的信息,或者可能无法为我的问题重复此信息。我有一个通用的类Table,有一个名为MyString的类。
template <typename typeGen, int DIM>
class Table {
public:
TableauGenerique() : index_(0) { //On initialise courant à 0
}
void add(typeGen type);
private:
typeGen tableGen_[DIM];
int index_;
};
我的问题是与添加功能。
有时我必须在main.cpp中执行此操作(效果很好)
Table <float,6> tabFloat;
tabFloat.add(1.6564);
有一次,我需要这样做是行不通的,因为我需要专门使用add函数来创建MyString对象,将字符串传递给它,然后将该对象存储在数组(tableGen)中:
TableauGenerique <MyString,4> tabString;
所以我(在上课之后)尝试了这个,但没有成功。
template <typename typeGen, int DIM>
void Table<typeGen,DIM>::add(typeGen type){ //Which is the generic one for float or ints
if(index_ < DIM) {
tableGen_[courant_] = type;
index_++;
}
}
template <class typeGen, int DIM>
void Table<typeGen,DIM>::add<string>(typeGen type) { //(line 75) Which is the specific or specialized function for myString
MyString str(type);
if(index_ < DIM) {
tableGen_[courant_] = str;
index_++;
}
}
所以,我怎么做这个工作,因为它根本无法编译,所以说:line75:error:'
我希望一切都足够清楚。让我知道是否有不清楚的地方。
非常感谢您的帮助 !
最佳答案
template <class typeGen, int DIM>
void Table<typeGen,DIM>::add<string>(typeGen type)
实际上,您不是要以函数模板开头时,便要尝试专门化
add()
。您希望它如何运作?您可能的意思是:(该课程的专业化)
template <int DIM>
void Table<string,DIM>::add(string type)
但这只有在您自己对类进行专门化的情况下才允许。如果不专门使用该类,则上面的代码将产生编译错误!
编辑:
您可以阅读以下在线教程:
Introduction to C++ Templates
14.5 — Class template specialization
Template Specialization and Partial Template Specialization
Explicit specialization (C++ only)
关于c++ - 如何使这个专门功能起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5370978/