gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:45 24 4
gpt4 key购买 nike

我有这个类模板

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com