成员访问和模板专业化

tun*_*nuz 4 c++ inheritance templates member-functions template-specialization

我有这个类模板

template <typename T>
class Wrapper
{
    public:
        virtual void parse(std::string s) = 0;

    protected:
        T value;
};
Run Code Online (Sandbox Code Playgroud)

理想情况下,每种类型都应该知道如何将自己从一个字符串解析,所以我想有,例如,特如

template<>
class Wrapper<int> 
{
    public:
        virtual void parse(std::string s) 
        {
            value = atoi(s.c_str());
        }
};
Run Code Online (Sandbox Code Playgroud)

但是,显然,我无法从主模板访问"value"成员.我得到的是:

In member function 'virtual void Wrapper<int>::parse(std::string)':
error: 'value' is not a member of 'Wrapper<int>'
Run Code Online (Sandbox Code Playgroud)

this->在前面添加value没有帮助.

你知道如何解决这个问题吗?

谢谢

Tem*_*Rex 5

类模板的各种特化完全不相互关联.Wrapper<int>对...没有任何了解Wrapper<char>.因此,您需要为每个专业化单独定义数据成员

template<>
class Wrapper<int> 
{
    public:
        virtual void parse(std::string s) 
        {
            value = atoi(s.c_str());
        }
    protected:
        int value;
};
Run Code Online (Sandbox Code Playgroud)

virtual前面还有关键字的问题parse().除非您打算Wrapper<int>成为可以parse()通过后续派生类重新定义其方法的基类,否则此处不需要它.如果您要做的就是创建各种Wrapper<>专业,那么您就不应该parse()虚拟化.