我有两个非常相似的模板类:一个管理T *对象的向量 并对这些指针做了一些事情,另一个管理T对象的向量,并对这些对象做同样的事情。
我是否有某种方法可以让一个类管理指针列表或对象列表?
答案 0 :(得分:1)
是。通过帮助程序仿函数与vector
的成员进行互动,在值框中将T&
转换为T*
。任何其他行为差异可以类似地计入traits / helper类型并以类似方式处理。
将仿函数作为template
的附加template
参数。通过让两个公共template
将适当的帮助函子传递给实现template
,可能会隐藏它。
在极其简单的情况下,你可以取消仿函数,只需在指针和引用上使用重载。
答案 1 :(得分:0)
首先,像平常一样宣布课程:
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