是否可以仅对模板类的一种方法进行专门化处理?

时间:2020-05-20 20:02:28

标签: c++ templates

这是我得到的模板:

template<typename T>
struct ListyThing{
        ListyThing(const char*, T*);
        std::vector<T*> myList;
        std::string myName, sep;
        void add(T*);
        void print();
};

template<typename T>
ListyThing<T>::ListyThing(const char* name, T* first){
        myName = name;
        if(first){
                add(first);
        }   
}

template<typename T>
void ListyThing<T>::print(){
        if(myList.size() > 0){ 
                std::cout<<myName<<std::endl;
        }   
        for(T* smth : myList){
                smth->print();
                std::cout<<std::endl;
        }   
}

template<typename T>
void ListyThing<T>::add(T* nT){
        myList.push_back(nT);
}

我的大多数 T 是用户定义的类,但我希望它也能够处理std :: string。问题出在ListyThing :: print()中,一个std :: string没有方法“ print”。我是否需要为整个类输入ListyThing的专业化信息,或者有什么方法可以使我的工作(如以下工作)?

template<>
void ListyThing<std::string>::print(){
        if(myList.size() > 0){ 
                std::cout<<myName<<std::endl;
        }   
        for(auto smth : myList){
                std::cout<<smth;
                std::cout<<std::endl;
        }   
}

0 个答案:

没有答案
相关问题