C++ C++;简单变型增压器
我正在尝试使用变量boost创建一个对象列表C++ C++;简单变型增压器,c++,boost,C++,Boost,我正在尝试使用变量boost创建一个对象列表 #include <string> #include <list> #include <iostream> #include <boost/variant.hpp> using namespace std; using namespace boost; class CSquare; class CRectangle { public: CRectangle(); }; class CS
#include <string>
#include <list>
#include <iostream>
#include <boost/variant.hpp>
using namespace std;
using namespace boost;
class CSquare;
class CRectangle {
public:
CRectangle();
};
class CSquare {
public:
CSquare();
};
int main()
{ typedef variant<CRectangle,CSquare, bool, int, string> object;
list<object> List;
List.push_back("Hello World!");
List.push_back(7);
List.push_back(true);
List.push_back(new CSquare());
List.push_back(new CRectangle ());
cout << "List Size is: " << List.size() << endl;
return 0;
}
我意识到,如果我使用以下表格,一切都会很好:
CSquare x;
CRectangle y;
List.push_back("Hello World!");
List.push_back(7);
List.push_back(true);
List.push_back(x);
List.push_back(y);
但如果可能的话,我想避免使用这种形式,因为我想不命名我的对象。这是我的系统的一项重要要求-我有没有办法避免使用命名对象?而不是列表。向后推(new CSquare());只要写
List.push_back(CSquare());
还要编写构造函数的定义只需更改一些内容,它就可以工作了:
#include <iostream>
#include <list>
#include <string>
#include <boost/variant.hpp>
using namespace std;
using namespace boost;
class CRectangle
{
public:
CRectangle() {}
};
class CSquare
{
public:
CSquare() {}
};
int main()
{
typedef variant<CRectangle, CSquare, bool, int, string> object;
list<object> List;
List.push_back(string("Hello World!"));
List.push_back(7);
List.push_back(true);
List.push_back(CSquare());
List.push_back(CRectangle());
cout << "List Size is: " << List.size() << endl;
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间boost;
类交叉角
{
公众:
CRectangle(){}
};
类CSquare
{
公众:
CSquare(){}
};
int main()
{
类型定义变量对象;
名单;
列表。向后推(字符串(“Hello World!”);
列表。推回(7);
列表。推回(true);
List.push_back(CSquare());
List.push_back(CRectangle());
您是否忘记实现构造函数CRectangle::CRectangle()
和CSquare::CSquare()
或者在类之外的某个地方实现它们,例如:
CRectangle::CRectangle()
{
// :::
};
…或在类内实现它们:
class CRectangle {
public:
CRectangle()
{
// :::
}
};
…或完全删除构造函数声明:
class CRectangle {
public:
};
class CRectangle {
public:
};