C++ 11 模板 Class 创建实例
C++ 11 template Class create instance
这是我的头文件的摘录
template <typename E>
class Container {
public:
Container& operator=(const Container&) = delete;
Container(const Container&) = delete;
Container() = default;
virtual ~Container() { }
...
然后我创建了另一个头文件来声明一个新的 class 并实现这些方法(这些现在没有显示)
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>( );
这里我创建了一个新的 class SepChaining 继承了 Container class 并且我创建了一个构造函数来分配 nmax
和 values
现在我的问题是:如何创建此 class 的新实例?我真的很困惑我需要在哪里指定实际的模板值,比如 int
编辑:
Header.h
#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
#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
#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 只是按照您告诉我的那样初始化构造函数。我看不出我的代码有任何问题..
只需将 E
更改为 int
:
SepChaining<int> instance;
这是我的头文件的摘录
template <typename E>
class Container {
public:
Container& operator=(const Container&) = delete;
Container(const Container&) = delete;
Container() = default;
virtual ~Container() { }
...
然后我创建了另一个头文件来声明一个新的 class 并实现这些方法(这些现在没有显示)
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>( );
这里我创建了一个新的 class SepChaining 继承了 Container class 并且我创建了一个构造函数来分配 nmax
和 values
现在我的问题是:如何创建此 class 的新实例?我真的很困惑我需要在哪里指定实际的模板值,比如 int
编辑:
Header.h
#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
#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
#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 只是按照您告诉我的那样初始化构造函数。我看不出我的代码有任何问题..
只需将 E
更改为 int
:
SepChaining<int> instance;