这是我得到的模板:
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;
}
}