我有一个类,我只需要一个模板方法,如下所示:
/* 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]
答案 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");
}