gpt4 book ai didi

c++ - 我怎样才能有一个模板元素的容器

转载 作者:行者123 更新时间:2023-11-30 01:21:54 24 4
gpt4 key购买 nike

我想拥有一个模板元素的容器,但它没有编译,因为没有给出第一个参数

所以我想将以下类放入 std::map

  template <typename T>
class TemplateParam
{
ITemplateParam<T> param_;
public:
TemplateParam(T value)
{
if (sizeof(value) >= sizeof(void*))
param_ = ptrTemplateParam<T>(value);
else
param_ = cpyTemplateParam<T>(value);
}
const T &getParam() const { return param_.getParam(); }
};

ITemplateParam

  template <typename U>
class ITemplateParam
{
public:
virtual ~ITemplateParam(){}
virtual const U& getParam() const = 0;
};

我想我明白为什么我不能将不同大小的元素放在一个容器中,这就是我使用 ptrTemplateParamcpyTemplateParam 的原因。 (我也尝试过使用 shared_ptr)

你知道我该如何解决我的问题吗

我可以使用boost库

我看过这个link但我不知道如何声明 setter/getter 。

编辑:

感谢您的回答,我可以将它存储在 map 中,但我无法在 map 中插入元素,我必须使用 void*

所以我将我的类(class)更改为:

  class ITemplateParam
{
public:
virtual ~ITemplateParam(){}
virtual const void *getParam() const = 0;
};

template <typename U>
class ptrTemplateParam : public ITemplateParam
{
U param_;
public:
ptrTemplateParam(U & param) : param_(param) {}
virtual const void *getParam() const { return param_; }
};

class TemplateParam
{
std::shared_ptr<ITemplateParam> param_;
public:
template <typename T>
TemplateParam(T value): param_(ptrTemplateParam<T>(value))
{
}

const void *getParam() const { return param_->getParam();}
};

我试着去做

std::map<std::string, TemplateParam>  m_;
m_["integer"] = TemplateParam(5);

编辑2boost::any 是解决方案

最佳答案

如果你需要一个包含不同类型元素的容器,那么你有基本上有 3 种方式:

  1. 有变体或 union 的容器。
  2. 拥有多态指针或多态智能指针的容器。
  3. 使用侵入性容器。

从您的问题中不清楚什么最适合您。

关于c++ - 我怎样才能有一个模板元素的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17399063/

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