C++ 模板类的向量?
我的一小部分代码有问题,我正在尝试使用模板和模板类的向量C++ 模板类的向量?,c++,templates,vector,C++,Templates,Vector,我的一小部分代码有问题,我正在尝试使用模板和模板类的向量 一位朋友帮我编写了以下代码,使其达到可编译的状态,但我仍然不能很好地使用派生类,因此我完全迷失了方向,无法克服这个小错误,我真的需要您的帮助 #include <iostream> #include <vector> class data_base { public: data_base( std::string &_id ); std:
一位朋友帮我编写了以下代码,使其达到可编译的状态,但我仍然不能很好地使用派生类,因此我完全迷失了方向,无法克服这个小错误,我真的需要您的帮助
#include <iostream>
#include <vector>
class data_base
{
public:
data_base( std::string &_id );
std::string id;
};
template <typename T>
class data : public data_base
{
public:
data<T>( T &_data, std::string &_id );
T *data;
};
data_base::data_base( std::string &_id )
{
id = _id;
}
template <typename T>
data<T>::data( T &_data, std::string &_id )
{
data =& _data;
id = _id;
}
int main()
{
std::vector< data_base*> stuff;
return 0;
}
#包括
#包括
类数据库
{
公众:
数据库(标准::字符串和id);
std::字符串id;
};
模板
类数据:公共数据库
{
公众:
数据(T和u数据,std::string和u id);
T*数据;
};
数据库::数据库(标准::字符串和id)
{
id=_id;
}
模板
数据::数据(T和U数据,std::字符串和id)
{
数据=&_数据;
id=_id;
}
int main()
{
std::vectorstuff;
返回0;
}
如何使用数据类并将其放入stuff vector中,然后再访问它?哦,如果有人知道一个关于使用基类/派生类的好教程,我真的可以使用它
提前谢谢 如何使用数据类并将其放入stuff vector中,然后访问它 其实很简单。让我们完成一些步骤 若要创建模板化数据类的单个实例,请在尖括号中声明要使用的类型:
data<int> MyDataObject(0, "zero");
你明白逻辑吗
但是,有一个问题:这不会编译在大多数C++编译器上,但这不是因为你犯了一个逻辑错误。因为在结尾的<代码> > /COD>不被看作是类型声明的一部分——它被看作是另外的东西(>>还有另一个意思。我相信这个问题在这个情况下是在最新的C++规范中被固定的)。要解决这个问题,就要强制编译器通过添加一个空间来正确解析它:
std::vector<data<int> > MyVector;
请注意,MyDataObject
和MyVector
都是在堆栈上分配的,因此当它们超出范围(声明每个对象的方法或块-一个块是{…}
节-结束)时,它们将被销毁。您还可以在堆上分配,并在向量中存储指向基本对象的指针。如果你想知道如何做到这一点,请评论-我可以扩展答案
哦,如果有人知道一个关于使用基类/派生类的好教程,我真的可以使用它
请每个问题只问一个问题。这有助于保持网站的组织性。此外,与你的第一个问题不同,我认为这是一个你可以很容易研究自己的东西。但是如果你有困难,请随意在这里问另一个问题
但这里有一个明显的错误。数据代码(派生类)具有以下构造函数:
template <typename T>
data<T>::data( T &_data, std::string &_id )
{
data =& _data;
id = _id;
}
构造函数中a:之后的项是“初始化列表”。事实上,你可以把一切都放在那里:
template <typename T>
data<T>::data( T &_data, std::string &_id ) :
data_base(id), // call parent constructor
data(_data)
{ }
并将声明更改为匹配(并以类似方式更改基类)。尝试命名对象,以便至少可以区分类型、局部变量和成员变量。
database
似乎毫无用处,因为它没有虚拟函数。您是否正在尝试重新实现boost::any
?我正在使用此代码的一部分,在我的序列化代码的旧版本中,我最近决定将其更改为与模板兼容,但无法使其正常工作。有没有一种方法可以完全忽略基类/派生类,并以任何可能的方式跳到一个模板类向量?
template <typename T>
data<T>::data( T &_data, std::string &_id )
{
data =& _data;
id = _id;
}
template <typename T>
data<T>::data( T &_data, std::string &_id ) :
data_base(id) // call parent constructor
{
data =& _data;
}
template <typename T>
data<T>::data( T &_data, std::string &_id ) :
data_base(id), // call parent constructor
data(_data)
{ }
template <typename T>
data<T>::data(T &data, std::string &id) :
data_base(id), // call parent constructor
m_data(data)
{ }