有一个带有隐式参数的模板类声明:
List.h
template <typename Item, const bool attribute = true>
class List: public OList <item, attribute>
{
public:
List() : OList<Item, attribute> () {}
....
};
Run Code Online (Sandbox Code Playgroud)
我尝试在不同的头文件中使用fllowing forward声明:
Analysis.h
template <typename T, const bool attribute = true>
class List;
Run Code Online (Sandbox Code Playgroud)
但是G ++显示了这个错误:
List.h:28: error: redefinition of default argument for `bool attribute'
Analysis.h:43: error: original definition appeared here
Run Code Online (Sandbox Code Playgroud)
如果我使用没有隐式参数的前向声明
template <typename T, const bool attribute>
class List;
Run Code Online (Sandbox Code Playgroud)
编译器不接受这种结构
Analysis.h
void function (List <Object> *list)
{
}
Run Code Online (Sandbox Code Playgroud)
并显示以下错误(即不接受隐含值):
Analysis.h:55: error: wrong number of …Run Code Online (Sandbox Code Playgroud) 有模板类List.
template <typename Point>
class List
{
public:
template <const unsigned short N>
void load ( const char *file);
...
};
template <typename Point>
template <const unsigned short N>
void List <Point>::load ( const char *file)
}
Run Code Online (Sandbox Code Playgroud)
如何专门化N = 2的方法负载?此代码无效...
template <typename Point>
void List <Point> <2>::load ( const char *file)
{
}
Run Code Online (Sandbox Code Playgroud)
而且这段代码也行不通.
template <typename Point>
void List <Point> ::load <2> ( const char *file )
{
}
Error 3 error C2768: 'List<Point>::load' : illegal use of explicit template …Run Code Online (Sandbox Code Playgroud) 以下代码表示基于std :: vector的容器
template <typename Item>
struct TList
{
typedef std::vector <Item> Type;
};
template <typename Item>
class List
{
private
typename TList <Item>::Type items;
....
}
int main()
{
List <Object> list;
}
Run Code Online (Sandbox Code Playgroud)
是否可以模板化std :: vector并创建一个通用的容器,类似的东西?
template <typename Item, typename stl_container>
struct TList
{
typedef stl_container<Item>;
};
Run Code Online (Sandbox Code Playgroud)
stl_container表示std :: vector,std :: list,std :: set ...?我想在创建时选择容器的类型.
List <Object, std::vector> list; //vector of objects, not a real code
List <Object, std::vector> list; //list of objects, not a real code
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答......
更新的问题: …
下面的构造函数
std::vector<Object> objects(n);
Run Code Online (Sandbox Code Playgroud)
创建n个对象,调用默认构造函数,即类似的东西:
std::vector <Object> objects;
for (unsigned int i = 0; i < n; i++) objects.push_back(o);
Run Code Online (Sandbox Code Playgroud)
此过程对动态分配的对象也有效吗?是建筑
std::vector<Object *> objects(n);
Run Code Online (Sandbox Code Playgroud)
代表这个功能?
std::vector <Object*> objects;
for (unsigned int i = 0; i < n; i++) objects.push_back(new Object());
Run Code Online (Sandbox Code Playgroud)
如果没有,有没有办法如何安排呢?