小编Rob*_*obo的帖子

具有隐式参数的模板,前向声明,C++

有一个带有隐式参数的模板类声明:

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)

c++ parameters templates implicit forward-declaration

8
推荐指数
1
解决办法
4629
查看次数

双模板方法的部分特化失败

有模板类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)

c++ templates partial-specialization specialization

7
推荐指数
1
解决办法
2921
查看次数

模板和STL

以下代码表示基于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)

谢谢你的回答......

更新的问题: …

c++ templates stl

5
推荐指数
3
解决办法
1523
查看次数

std :: vector,constructors,objects

下面的构造函数

 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)

如果没有,有没有办法如何安排呢?

c++ constructor pointers stl vector

1
推荐指数
1
解决办法
5704
查看次数