Использование ограничений и концепции для разрешения только многомерных векторных итераторов в качестве параметров -std = c ++ 20 - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь установить требования, чтобы параметр функции был многомерным векторным итератором.

Для начала я попытался установить многомерный вектор в качестве требования.

То есть std::vector<std:vector<typename>> должно быть разрешено в качестве аргумента, а std::vector<typename> не должно быть разрешено.

Вот как я этого добился

#include<iostream>
#include<vector>

template<typename some_vect_type>
concept IS_MULTI_DIM = requires(some_vect_type a, some_vect_type b)
{
    {a[0].begin()};
    {b[0].begin()};   
};


template<IS_MULTI_DIM some_vect_type>
void putVectors(some_vect_type a, some_vect_type b)
{
   std::cout<<"Multi dimensional vectors received\n";
}


int main()
{
    std::vector<std::vector<int>> x;    
    putVectors(x,x);
}

Я не уверен, является ли этот метод правильным или принятым способ достижения. Поскольку не векторы могут также иметь .begin()

Если это так, как я могу проверить то же самое для их итераторов вместо многомерного вектора?

...