模板类,用于管理指针向量和对象向量

时间:2013-12-19 02:42:29

标签: c++ templates stl

我有两个非常相似的模板类:一个管理T *对象的向量 并对这些指针做了一些事情,另一个管理T对象的向量,并对这些对象做同样的事情。

我是否有某种方法可以让一个类管理指针列表或对象列表?

2 个答案:

答案 0 :(得分:1)

是。通过帮助程序仿函数与vector的成员进行互动,在值框中将T&转换为T*。任何其他行为差异可以类似地计入traits / helper类型并以类似方式处理。

将仿函数作为template的附加template参数。通过让两个公共template将适当的帮助函子传递给实现template,可能会隐藏它。

在极其简单的情况下,你可以取消仿函数,只需在指针和引用上使用重载。

答案 1 :(得分:0)

是。使用template specialization

首先,像平常一样宣布课程:

template <typename T>
class Foo
{
     ...
};

然后声明指针类型的特化:

template <typename T>
class Foo<T*>
{
    //re-define any methods you want to be different for the pointer implementation.
};

然后可以正常使用该类,但如果模板参数是指针类型,则它将使用T*实现:

Foo<Bar> fooBar; //uses the default implementation
Foo<Bar*> fooPbar; //uses the specialized implementation