Вижте този код.
#include <vector>
template<class ...Args>
using other_vector = std::vector<Args...>;
template<class T>
void f(std::vector<T>& ) {}
template<class T>
void f(other_vector<T>& ) {}
int main()
{
other_vector<int> b;
f(b);
return 0;
}
Не се компилира, защото f
се предекларира. Напълно разбирам грешката. Въпреки това имам нужда от втори клас, който се държи като std::vector<T>
, но ще се разглежда като различен тип, така че претоварването, както в горния пример, ще бъде законно.
Какво бих могъл да направя?
- Нека новият клас има
std::vector<T>
като базов клас. Това може да работи, но човек не трябва да наследява от std контейнери. - Нека новият клас има член от тип std::vector и след това предекларирайте всички функции, за да пренасочите към функциите на члена. Звучи като много работа.
Някаква по-добра алтернатива? Разрешени са C++11 или C++14.
BOOST_STRONG_TYPEDEF
. Ако не работи с шаблони, вероятно бихте могли да почерпите вдъхновение да направите нещо, което работи. - person chris   schedule 07.01.2014struct vector_wrapper{ std::vector<T> vector; };
? - person zch   schedule 07.01.2014