我有这个类模板
template <typename T>
class Wrapper
{
public:
virtual void parse(std::string s) = 0;
protected:
T value;
};
理想情况下,每种类型都应该知道如何从字符串中解析自身,所以我想有,例如,专门化
template<>
class Wrapper<int>
{
public:
virtual void parse(std::string s)
{
value = atoi(s.c_str());
}
};
但是,显然,我无法从主模板访问“值”成员。我得到的是这样的:
In member function 'virtual void Wrapper<int>::parse(std::string)':
error: 'value' is not a member of 'Wrapper<int>'
在 value
前面添加 this->
没有帮助。
你知道如何解决这个问题吗?
谢谢
最佳答案
类模板的各种特化彼此完全无关。 Wrapper<int>
对例如Wrapper<char>
.所以需要为每个特化分别定义数据成员
template<>
class Wrapper<int>
{
public:
virtual void parse(std::string s)
{
value = atoi(s.c_str());
}
protected:
int value;
};
还有virtual
的问题parse()
前面的关键字.除非你打算 Wrapper<int>
否则你不需要它成为一个可以拥有 parse()
的基类方法由后续的派生类重新定义。如果您要做的就是创建各种 Wrapper<>
特化,那么你不应该做 parse()
虚拟。
关于c++ - 成员访问和模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897448/