如何在C++中专门化 std::vector 的模板模板参数
How to specialize template template parameter for std::vector in C++
我需要对这段代码进行专业化:
template < class T, class Alloc, template <class, class> class VECTOR >
void function(const VECTOR<T, Alloc> &argument);
对于模板 std::vector。目前,它适用于任何 2 参数模板("类 VECTOR")参数。
换句话说:
// A, B -- any unpredictable types
function< std::vector <A, B> > (arg); // specialization
function< Some2ArgsTemplate <A, B> > (arg); // general
function< SomeOther2ArgsTemplate <A, B> > (arg); // general
是否可以在不了解 A 和 B 的情况下实现它?任何C++11/C++14的想法都可以。
不要专门化,重载:
template < class T, class Alloc>
void function(const std::vector<T, Alloc> &argument);
这在您传入std::vector
而不是任何其他 2 类型的类模板(例如 std::list
)。它将以一致、易于推理的方式被首选。此外,无论如何,您都无法部分专用化函数模板。
显式函数模板专用化是...问题。您编写专业课程的顺序可能很重要!
<小时 />请注意,此语法不正确:
function< Some2ArgsTemplate <A, B> > (arg);
显式指定的模板参数从左到右。所以在这里你指定T
要Some2ArgsTemplate <A, B>
...这可能会阻止扣除成功。您不需要显式指定任何内容:
Some2ArgTemplate<A, B> arg = ...;
function(arg); // deduce T=A, Alloc=B, VECTOR=Some2ArgTemplate
相关文章:
- std::vector 没有重载函数的实例与参数列表匹配
- 将可变参数模板类存储到 std::vector 中
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- C++如何在类Vector中显示不同类型的参数
- 以 Eigen::Vector 作为参数
- 将双指针作为参数传递给需要引用 std::vector <double>的函数
- STL vector.insert 方法期望_InputIterator作为参数
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- pybind11:如何包装以 std::vector<double> 为参数以避免数据复制的 C++ 函数
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 使用 std::vector<Particle> 粒子;函数 .at() 不能与迭代器一起使用,它作为 for 循环中的参数
- 如何使用 std::vector 作为参数调用 Fortran 77 C++函数?
- 在 C++ 中使用 vector 传递任意数量的参数
- 如何有效地传递 std::vector<cv::P oint3f> 的子向量作为参数(不拥有函数)
- 错误:参数太少,无法函数"int Solution(std::vector<int>, int)"
- "vector<string>"作为函数参数传递,我得到一个错误
- 如何从 std::vector 转换为参数
- 如何在没有参数列表的情况下定义向量无效使用模板名称 std::vector
- 函数的可选std::vector参数