C ++如何根据模板类型获得对象向量
C++ How to have a vector of objects depending on template type
我有一个模板 class C,它应该包含一个带有 E 对象的向量。向量中的 E 对象将存储与模板相同的类型。因此,如果 C 对象的类型为 int
,则向量应包含包含 int
的 E 对象,如果 C 具有 double
,则 E 应存储 double
等。代码看起来像这样:
template<class T> class C {
public:
class E {
private:
T value; //if C has type int then the events should store int
std::string description;
public:
Event(std::string desc, T val) {
this->description = desc;
this->value = val;
}
};
C();
virtual ~C();
bool add_e (std::string description);
private:
T c_value;
std::vector<E> c_vector; //this should look somewhat like [E<int>, E<int>, E<int>]
};
这会编译,但是当我尝试将元素添加到 C.cpp 文件中的 c_vector 时,如下所示:
template<class T>
bool C<T>::add_e(std::string description) {
c_vector.add(E(description, c_value));
}
我收到错误消息:'class std::vector < C< int >::E, std::allocator< C< int >::E > >' 没有名为 'add' 的成员。到底是怎么回事?如何完成存储与封闭模板 class 类型 C 存储相同类型的 E 对象?
当我尝试搜索网络时,我只找到有关在向量中存储不同模板类型的信息,例如使 E 成为抽象 class 的派生 class,然后存储抽象 class 向量中的指针,但我希望所有元素都包含相同的类型。
使用 std::vector
中的 push_back()
我有一个模板 class C,它应该包含一个带有 E 对象的向量。向量中的 E 对象将存储与模板相同的类型。因此,如果 C 对象的类型为 int
,则向量应包含包含 int
的 E 对象,如果 C 具有 double
,则 E 应存储 double
等。代码看起来像这样:
template<class T> class C {
public:
class E {
private:
T value; //if C has type int then the events should store int
std::string description;
public:
Event(std::string desc, T val) {
this->description = desc;
this->value = val;
}
};
C();
virtual ~C();
bool add_e (std::string description);
private:
T c_value;
std::vector<E> c_vector; //this should look somewhat like [E<int>, E<int>, E<int>]
};
这会编译,但是当我尝试将元素添加到 C.cpp 文件中的 c_vector 时,如下所示:
template<class T>
bool C<T>::add_e(std::string description) {
c_vector.add(E(description, c_value));
}
我收到错误消息:'class std::vector < C< int >::E, std::allocator< C< int >::E > >' 没有名为 'add' 的成员。到底是怎么回事?如何完成存储与封闭模板 class 类型 C 存储相同类型的 E 对象?
当我尝试搜索网络时,我只找到有关在向量中存储不同模板类型的信息,例如使 E 成为抽象 class 的派生 class,然后存储抽象 class 向量中的指针,但我希望所有元素都包含相同的类型。
使用 std::vector
push_back()