C ++只能模板化一个方法吗?

时间:2014-07-31 13:15:50

标签: c++ eclipse templates c++03

我有一个类,我只需要一个模板方法,如下所示:

/* A.h */

class A {
public: 
  void foo() const; 
private:
  template <class T> 
  void foo2(const T& t, const std::string& s) {
     /* */
  }
}

这个编译很好,但是如果在foo专门化中我尝试调用foo2我会收到错误:

/* A.cpp */

void A::foo() {
   this->foo2(1, "test");
}

错误是:

passing ‘const A’ as ‘this’ argument of ‘void A::foo2(const T&, const
string&) [with T = int, std::string = std::basic_string<char>]’
discards qualifiers [-fpermissive]

3 个答案:

答案 0 :(得分:2)

是的,这是可能的。

我觉得你错过了你的例子中的void foo()的const修饰符,不是吗?

如果我的假设是正确的,也可以为foo2设置一个const修饰符。

答案 1 :(得分:1)

您正在从const函数foo2调用同一个对象非常量函数foo。因此错误。通话中的BTW this不是必需的:

this->foo2(1, "test");

以下也会这样做:

foo2(1, "test");

答案 2 :(得分:1)

你在类声明结束时错过了;,你的const正确性似乎不一致。这在vc12编译给我:

/* A.h */

class A {
public:
    void foo() const;
private:
    template <class T>
    void foo2(const T& t, const std::string& s) const {
        /* */
    }
};
void A::foo() const {
    this->foo2(1, "test");
}