2016-07-15 47 views
3

我想通過一個對的向量函數。實際的矢量實現以及對的類型應該是模板參數。向量的對通用向量和對類型,模板的模板

我認爲是這樣的:

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::pairvectorstdstxxl:vector)與uint32_tuint64_t一起作爲pair.firstpair.second的類型。

+0

或者你可以讓任何類型的,只要它有你需要(例如'vec.begin()','vec.end()','vec.begin()。第一/秒'的方法等) – MadScientist

+0

定義「實際向量實現」。 –

+0

是的矢量任何類型都會罰款我只想指定類型名稱,並且它有一個類型參數std :: pair,它具有typename t_x和t_y的類型參數 –

回答

2

您可以使用此:

template<typename X, 
     typename Y, 
     template<typename, typename> class Pair, 
     template<typename...> class Vector> 
void fun(Vector<Pair<X, Y>> vec) 
{ 
    //... 
} 
+0

@JanB你使用什麼編譯器? – xinaiz

+0

非常感謝。它工作完美,比我想象的更容易。我使用gcc 4.9。 「 –

1

如果我理解正確的話,你想有一個函數,它的通用std::pairstd::vector。在這裏你去:

template <typename First, typename Second> 
void function(std::vector< std::pair<First,Second> > vector_of_pairs) 
{ 
    ... 
} 

編輯:如果你想利用這兩個std::vectorstxxl::vector,您可以使用模板模板參數與C++ 11的可變參數模板(因爲std::vectorstxxl::vector有不同數量的模板參數):

template <typename First, 
      typename Second, 
      template <typename...> class AnyVector, 
      typename... OtherStuff> 
      void function(AnyVector<std::pair<First,Second>, OtherStuff...> vector_of_pairs) 
      { 
       /*...*/ 
      } 
+0

」應該允許傳遞一個向量(std或stxxl:vector)「 - 您的答案可以防止使用除」std :: vector「之外的任何內容。 –

+0

@JamesAdkison編輯 – PcAF

1

不確定要了解您的要求,但...下面的示例如何?

#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; 
}