这是交易。我在这个论坛上看过,但是找不到要搜索的信息,或者可能无法为我的问题重复此信息。我有一个通用的类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/

10-11 19:37