gpt4 book ai didi

c++ - 带有容器和默认分配器的模板模板参数 : can I make my declaration more compact?

转载 作者:可可西里 更新时间:2023-11-01 18:26:34 25 4
gpt4 key购买 nike

我在看这个有趣的话题: https://stackoverflow.com/a/16596463/2436175

我的具体案例涉及使用来自 opencv 的 cv::Point_ 和 cv::Rect_ 的标准容器声明模板函数。我想针对以下模板:

  • 我将使用的标准容器类型
  • 完成cv::Point_和cv::Rect_定义的基本数据类型

我最终做出了以下声明:

template <typename T, template <typename, typename> class Container_t>
void CreateRects(const Container_t<cv::Point_<T>,std::allocator<cv::Point_<T> > >& points,
const T value,
Container_t<cv::Rect_<T>,std::allocator<cv::Rect_<T> > >& rects) {

}

用这个编译得很好:

void dummy() {

const std::vector<cv::Point_<double> > points;
std::vector<cv::Rect_<double> > rects;
CreateRects(points,5.0,rects);

}

(我还看到我也可以使用,例如 CreateRects<double>(points,5,rects) )

我想知道是否有任何方法可以使我的声明更紧凑,例如无需指定默认分配器的 2 倍。

最佳答案

您可以将模板模板参数 Container_t 的模板参数描述添加到您的函数模板中:

template
<
typename T,
template
<
typename U,
typename = std::allocator<U>
>
class Container_t
>
void CreateRects
(
const Container_t<cv::Point_<T> >& points,
const T value,
Container_t<cv::Rect_<T> >& rects
)
{

}

或者您可以使用 C++11 可变参数模板:

template
<
typename T,
template <typename...> class Container_t
>
void CreateRects
(
const Container_t<cv::Point_<T>>& points,
const T value,
Container_t<cv::Rect_<T>>& rects
)
{

}

关于c++ - 带有容器和默认分配器的模板模板参数 : can I make my declaration more compact?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com