在QVector中使用指针和非指针参数的C ++模板

大卫

我试图避免不得不两次使用“几乎”相同的代码。我有以下模板函数,该函数在中搜索提供的值QVector,并将索引返回到元素。

template<class tVec,class tVal>
int upperBoundIndex(const QVector<tVec> &vec,int first,int last,tVal value)
{
//code here
}

例如,搜索以下类型的向量可以很好地工作:QVector<int>,但是我也希望能够搜索类型的向量QVector<int*>,因此我编写了另一个模板函数。

template<class tVec,class tVal>
int upperBoundIndex(const QVector<tVec*> &vec,int first,int last,tVal value)
{
//similar code here, but the dereferencing
}

这也可以正常工作,但是我一直想知道,有没有一种方法可以对两个函数使用相同的代码?因为我几乎将代码从一个函数复制并粘贴到另一个函数,并且到目前为止,每当我在一个函数I中进行更改时,就跳到另一个函数并应用相同的更改,是否有更好的解决方案?

ps我不是在寻找替代搜索功能,我知道例如在std名称空间中就有搜索功能。我想知道是否有一种方法可以优化我的方法。

呱呱

您可以对容器Qvector进行模板化,并使其更通用,例如:

template<class Container>
int upperBoundIndex(const Container &vec,int first,int last,typename Container::value_type value)
{
 // your code
}

但是我认为您应该std::upper_bound在甚至有示例的地方使用索引来获取索引

所以我会改用这种可重用的函数:

template<class ForwardIt, class T>
T upperBoundIndex(ForwardIt first, ForwardIt last, const T& value)
{
    return (std::upper_bound (first, last, value) - first);
}

现场例子

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板参数中的C ++智能指针

来自分类Dev

模板函数指针作为模板参数

来自分类Dev

在C ++ 03中将指针模板和指向成员的指针作为模板参数

来自分类Dev

如何使用模板参数键入函数指针

来自分类Dev

具有指针参数的C ++模板函数

来自分类Dev

为什么我不能在C ++ 11中使用constexpr指针作为模板参数?

来自分类Dev

在模板参数列表中使用decltype推断指向类成员的指针的类型

来自分类Dev

具有可以是指针类型或非指针类型的模板参数

来自分类Dev

在C ++中使用功能模板作为模板模板参数

来自分类Dev

使用绝对指针地址作为模板参数

来自分类Dev

c ++:带模板的函数指针

来自分类Dev

模板参数推导失败,使用函数指针作为参数

来自分类Dev

模板和函数指针混淆

来自分类Dev

指向模板参数类型的指针

来自分类Dev

嵌套模板(模板模板参数)

来自分类Dev

函数指针作为模板参数和签名

来自分类Dev

模板函数指针和lambda

来自分类Dev

模板参数包指针的大小

来自分类Dev

C ++模板类型的圆度和指向模板实例的非模板指针

来自分类Dev

模板类的模板函数指针-C ++

来自分类Dev

模板中的C ++函数指针

来自分类Dev

在C ++ 03中将指针模板和指向成员的指针作为模板参数

来自分类Dev

成员函数的模板和指针

来自分类Dev

具有指针参数的C ++模板函数

来自分类Dev

指针作为C ++中的模板参数

来自分类Dev

C ++模板使用问题指针

来自分类Dev

使用绝对指针地址作为模板参数

来自分类Dev

模板和函数指针混淆

来自分类Dev

在成员数据中使用模板参数的模板类的基类指针