我试图有一个模板元素的容器,但它没有编译,因为第一个参数没有给出
所以我想把下面的类放在 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(); }
};
模板参数
template <typename U>
class ITemplateParam
{
public:
virtual ~ITemplateParam(){}
virtual const U& getParam() const = 0;
};
我想我明白为什么我不能将不同大小的元素放入容器中,这就是我使用ptrTemplateParam
and的原因cpyTemplateParam
。(我也尝试过使用 shared_ptr)
你知道我该如何解决我的问题吗
我可以使用 boost 库
我已经查看了这个链接,但我不知道如何声明 getter。
编辑:
感谢您的回答,我可以将其存储在地图中,但无法在地图中插入元素,我必须使用 void*
所以我把我的班级改成:
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);
Edit2 boost::any 是解决方案