我以为this回答了我的问题,但是我无法编译以下内容:
#include <string>
template<class C>
class tKeySet {
protected:
bool set;
static const std::string key;
};
template<class C, typename T>
class tKeySetType : private tKeySet<C> {
protected:
T m_val;
};
template<class C>
class tKeySetString: private tKeySetType<C, std::string> {
public:
tKeySetString<C>& operator=(const std::string &str) {
this->set = true;
this->m_val = str;
return *this;
}
};
class foo : private tKeySetString<foo> { };
template<> const std::string tKeySet<foo>::key = "foo key";
int main(void) {
foo f;
f = std::string("foo");
return 0;
}
如何使tKeySetString<C>
中的赋值运算符与std::string
一起使用?
答案 0 :(得分:1)
foo
私有继承自tKeySetString<foo>
,这意味着operator=
将不会成为其公共界面的一部分。
您可以通过编写
将其引入public:
using tKeySetString::operator=;
在foo
的定义中。
答案 1 :(得分:0)
您没有为operator=
类显式创建一个tKeySetString
,因此编译器将为您创建一个默认值。但是,这将隐藏继承的operator=
。因此,您需要显式声明要使用基类的operator=
。您需要添加:
using tKeySetString::operator=;
在foo
的公共部分。