Ben*_*rer 3 c++ templates vector generic-programming c++11
我正在尝试编写一个应该与包含相同类型的不同容器(std::vector、QVector)一起使用的算法:
template<class Container>
boolean findpeaks(cv::Mat &m, Container<std::pair<int, double>> &peaks) {
// do stuff
peaks.push_back(std::make_pair(1, 1.0));
return true;
}
Run Code Online (Sandbox Code Playgroud)
这一个给了我
“容器”不是模板
template<template<typename> class Container>
Run Code Online (Sandbox Code Playgroud)
我得到:
错误:没有匹配的函数可用于调用“findpeaks(cv::MatExpr, std::vector >&)”
...
注意:模板参数推导/替换失败:
错误:模板参数数量错误(2,应该是 1)
调用代码:
cv::Mat m(data, true);
std::vector<std::pair<int, double>> peaks;
QVERIFY(daf::findpeaks(m.t(), peaks));
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样的事情:
template<template< template<typename, typename> typename > class Container>
Run Code Online (Sandbox Code Playgroud)
警告:ISO C++ 禁止在模板模板参数中使用 typename 键;使用 -std=c++1z 或 -std=gnu++1z [-Wpedantic]
还有一些错误...
std::vector有两个模板参数。
Run Code Online (Sandbox Code Playgroud)template< class T, class Allocator = std::allocator<T> > class vector;
并且QVector有一个。您可以使用可变参数模板来做到这一点:
template<template <typename...> class Container>
bool findpeaks(cv::Mat &m, Container<std::pair<int, double>> &peaks) {
// do stuff
peaks.push_back(std::make_pair(1, 1.0));
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1330 次 |
| 最近记录: |