具有通用向量和对类型的对向量,模板模板
Vector of pairs with generic vector and pair type, template of template
我想将一个向量对传递给一个函数。实际的矢量实现以及对的类型应该是模板参数。
我想到了这样的事情:
template<uint8_t t_k,
typename t_bv,
typename t_rank,
template <template <template<typename t_x,
typename t_y> class std::pair>
typename t_vector>> typename t_vector>
前3个为其他模板参数。最后一个模板参数应允许传递 std::pair
的 vector
(std
或 stxxl:vector
),其中 uint32_t
或 uint64_t
作为类型pair.first
和 pair.second
.
你可以使用这个:
template<typename X,
typename Y,
template<typename, typename> class Pair,
template<typename...> class Vector>
void fun(Vector<Pair<X, Y>> vec)
{
//...
}
如果我对你的理解正确,你想要一个 函数,它采用通用 std::pair
的 std::vector
。给你:
template <typename First, typename Second>
void function(std::vector< std::pair<First,Second> > vector_of_pairs)
{
...
}
编辑:如果你想同时使用 std::vector
和 stxxl::vector
,你可以使用 template 模板参数 和 c++11 的 可变模板(因为std::vector
和stxxl::vector
有不同数量的模板参数):
template <typename First,
typename Second,
template <typename...> class AnyVector,
typename... OtherStuff>
void function(AnyVector<std::pair<First,Second>, OtherStuff...> vector_of_pairs)
{
/*...*/
}
不确定是否理解您的要求,但是...下面的示例怎么样?
#include <iostream>
#include <utility>
#include <vector>
#include <deque>
template <typename P1, typename P2, template<typename...> class Vect>
std::size_t func (const Vect<std::pair<P1, P2>> & v)
{ return v.size(); }
int main()
{
std::vector<std::pair<int, long>> v1{ {1, 1L}, {2, 2L}, {3, 3L} };
std::deque<std::pair<long, int>> v2{ {3L, 1}, {2L, 2} };
std::cout << func(v1) << std::endl;
std::cout << func(v2) << std::endl;
return 0;
}
我想将一个向量对传递给一个函数。实际的矢量实现以及对的类型应该是模板参数。
我想到了这样的事情:
template<uint8_t t_k,
typename t_bv,
typename t_rank,
template <template <template<typename t_x,
typename t_y> class std::pair>
typename t_vector>> typename t_vector>
前3个为其他模板参数。最后一个模板参数应允许传递 std::pair
的 vector
(std
或 stxxl:vector
),其中 uint32_t
或 uint64_t
作为类型pair.first
和 pair.second
.
你可以使用这个:
template<typename X,
typename Y,
template<typename, typename> class Pair,
template<typename...> class Vector>
void fun(Vector<Pair<X, Y>> vec)
{
//...
}
如果我对你的理解正确,你想要一个 函数,它采用通用 std::pair
的 std::vector
。给你:
template <typename First, typename Second>
void function(std::vector< std::pair<First,Second> > vector_of_pairs)
{
...
}
编辑:如果你想同时使用 std::vector
和 stxxl::vector
,你可以使用 template 模板参数 和 c++11 的 可变模板(因为std::vector
和stxxl::vector
有不同数量的模板参数):
template <typename First,
typename Second,
template <typename...> class AnyVector,
typename... OtherStuff>
void function(AnyVector<std::pair<First,Second>, OtherStuff...> vector_of_pairs)
{
/*...*/
}
不确定是否理解您的要求,但是...下面的示例怎么样?
#include <iostream>
#include <utility>
#include <vector>
#include <deque>
template <typename P1, typename P2, template<typename...> class Vect>
std::size_t func (const Vect<std::pair<P1, P2>> & v)
{ return v.size(); }
int main()
{
std::vector<std::pair<int, long>> v1{ {1, 1L}, {2, 2L}, {3, 3L} };
std::deque<std::pair<long, int>> v2{ {3L, 1}, {2L, 2} };
std::cout << func(v1) << std::endl;
std::cout << func(v2) << std::endl;
return 0;
}