我是c++的新手,我正在学习使用模板。
我想制作一个具有2个模板参数的模板类,并专门针对该类的单个成员函数,以防第二个模板参数是在第一个参数的指针类型上模板化的 vector 。我认为我尝试过的例子将更加清楚:

//Container.h:

template<class T ,   class CONT  >
class Container {

private:
    CONT container;
    T    someData;
public:
    void foo();
};

我尝试过的std::vector的规范化是:
//Container.cpp

template<class T>
void Container<T, std::vector<T*> > ::foo(){
     cout << "specialized foo:  " << container.pop_back();
    }

template<class T, class CONT  >
void Container<T, CONT > ::foo(){
     cout << "regular foo: " << container.pop_back());
}

但我得到这些错误:
error C3860: template argument list following class template name must list parameters in the order used in template parameter list
error C2976: 'Container<T,CONT>' : too few template argument

Container类的用法必须是第一个参数是某种类型,第二个参数是STL容器, vector 或列表。例如 :
Container<int, vector<int*> > c;
c.foo();

我在做什么错?

最佳答案

在类模板中定义成员函数的正确语法是

template<class T, class CONT >
void Container<T, CONT>::foo()
{
     cout << "specialized foo:" ;
}

foo()函数没有重载和重新定义。重新定义 foo()函数也会产生错误。您不能根据返回类型重载函数。
std::vector的特化不正确。
<cout << container.pop_back();

07-24 09:44
查看更多