首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ 11模板类创建实例

C++ 11模板类创建实例
EN

Stack Overflow用户
提问于 2015-05-18 17:45:48
回答 1查看 3.1K关注 0票数 0

这是我的头文件的摘录。

代码语言:javascript
复制
template <typename E>
class Container {
public:
  Container& operator=(const Container&) = delete;
  Container(const Container&) = delete;
  Container() = default;

  virtual ~Container() { }
...

然后,我创建了另一个头文件来声明一个新类并实现这些方法(现在没有显示这些方法)。

代码语言:javascript
复制
template <typename E>
class SepChaining : public Container<E> {
  size_t nmax;
  size_t n;
  int *values;
public:

  SepChaining<E>( size_t nmax ) : nmax(nmax), n(0), values( new int[this->nmax]) { }

  virtual ~SepChaining<E>( );

在这里,我创建了一个继承容器类的新类SepChaining,并创建了一个构造函数来分配nmaxvalues

现在我的问题是:如何创建这个类的新实例?我真的很困惑我需要在哪里指定实际的模板值,int

编辑:

Header.h

代码语言:javascript
复制
 #include <iostream>
 #include <functional>

enum Order { dontcare, ascending, descending };

template <typename E>
class Container {
public:
  Container& operator=(const Container&) = delete;
  Container(const Container&) = delete;
  Container() = default;

  virtual ~Container() { }

  virtual void add(const E& e) { add(&e, 1); }
  virtual void add(const E e[], size_t s) = 0;

  virtual void remove(const E& e) { remove(&e, 1); }
  virtual void remove(const E e[], size_t s) = 0;

  virtual bool member(const E& e) const = 0;
};

SepChaining.h

代码语言:javascript
复制
 #include <iostream>
 #include "Container.h"

template <typename E>
class SepChaining : public Container<E> {
    size_t nmax;
    size_t n;
    int *values;
public:

    SepChaining<E> ( size_t nmax ) : nmax(nmax), n(0), values(new int[this->nmax]) { }

    virtual ~SepChaining ();

    using Container<E>::add;
    virtual void add(const E e[], size_t s);

    using Container<E>::remove;
    virtual void remove(const E e[], size_t s);

    virtual bool member(const E& e) const;

};

SepChaining.cpp

代码语言:javascript
复制
#include <iostream>
#include "SepChaining.h"

template <typename E>
SepChaining<E>::~SepChaining( ){
    delete[] values;
}

template <typename E>
void SepChaining<E>::add(const E e[], size_t s) {
    std::cout << "Add method";
}

template <typename E>
void SepChaining<E>::remove(const E e[], size_t s) {
    std::cout << "Remove method";
}

template <typename E>
bool SepChaining<E>::member(const E &e) const {
    for (size_t i = 0; i < n; ++i) {
        if (values[i] == e) return true;
    }
    return false;
}

这是我的三个文件,正如您告诉我的,main.cpp只是在初始化构造函数。我看不出我的代码有什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 17:49:34

只需将E更改为int

代码语言:javascript
复制
SepChaining<int> instance;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30309739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档