gpt4 book ai didi

c++ - 特化不包含在主模板中声明的数据

转载 作者:行者123 更新时间:2023-12-05 02:36:17 27 4
gpt4 key购买 nike

class Base {
public:
virtual void load() = 0;
};

template<typename T>
class CustomConfig : public Base {
public:
const T& getData() { return data; }
T data;
};

template<>
class CustomConfig<std::set<uint32_t>> {
public:
virtual void load() {
this->data = {4, 5, 6};
}
};

我不知道为什么会出现错误:

class CustomConfig<std::set<unsigned int> >' has no member named 'data'

真实案例

事实上,我遇到了这样一个问题:我需要一个虚函数,但它的返回类型不是唯一的,它可能是一个std::set。 , 一个 std::vector , std::list或其他一些类型。然后我在想模板技术可能会有所帮助。这就是我定义类 template<typename T> class CustomConfig 的原因.

我希望这不是一个严重的 XY 问题...显然我误解了模板类的工作原理。

最佳答案

要提供其他答案的替代方案,这些答案都说您必须添加数据成员,还有另一种选择是从模板实例化派生:

class CustomConfigSetOfUInt : public CustomConfig<std::set<uint32_t>> {
public:
void load() override {
this->data = {4, 5, 6};
}
};

如果您的 CustomConfig 提供了其他可以从类模板中完成的通用功能,那么您可能更喜欢这种方法。您的设计总体上有点不舒服,并且似乎对任何一种封装都有一种“放松”的态度。您可能需要更深入地考虑一下。

关于c++ - 特化不包含在主模板中声明的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70329898/

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