c++ - 成员访问和模板特化

标签 c++ templates inheritance template-specialization member-functions

我有这个类模板

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/

相关文章:

c++ - 使用 C++ 类成员函数(不能是静态的)作为 C 回调函数

c++ - 尝试模拟重力时的奇怪行为

c++ - CUDA:减少算法

wpf - 当 WPF TextBox 获得焦点时,如何轻松更改它的样式?

c++ - 范围界定是访问虚拟功能的合法方式吗?

python - 如果时区不是无,日期时间 "fromtimestamp()"将忽略继承

c++ - 3 Function plus Main Function C 程序计算和显示阶乘

c++ - 将自定义类与自定义模板容器一起使用

c++ - 初始化列表不检测公开继承的成员

c++ - 带有默认模板参数的友元函数模板