Как я могу использовать свой собственный enable_if в C ++ 98? - PullRequest
0 голосов
/ 02 мая 2020

В настоящее время я делаю пользовательский контейнер Vector для изучения. У моего назначения есть ограничение, что я должен использовать версию c ++ 98.

Но во время реализации функции "вставки" у меня есть проблема, которую я объяснил в этой ссылке .

Я получил несколько подсказок, что я должен использовать «enable_if» по ссылке. Но так как я не имею права использовать расширение C ++ 11 (определено enable_if), поэтому я сам включил if и is_integral.

Это предыдущее.

// 1
template <typename T, typename Alloc>
void vector<T, Alloc>::insert(iterator position, size_type n, const value_type &val)

// 2
template <typename T, typename Alloc>
template <class InputIterator>
void vector<T, Alloc>::insert(iterator position, InputIterator first, InputIterator last)

Это код, который я изменил с помощью пользовательских enable_if и is_integral

// 1
template <typename T, typename Alloc>
void vector<T, Alloc>::insert(iterator position, size_type n, const value_type &val)

// 2
template <typename T, typename Alloc>
template <class InputIterator, class  = typename ft::enable_if<!ft::is_integral<InputIterator>::value>::type>
void vector<T, Alloc>::insert(iterator position, InputIterator first, InputIterator last)

Это хорошо работает, если я не даю компилятору параметр "-std = c ++ 98", но если я даю его, он говорит

./Vector.hpp:87:33: warning: default template arguments for a function template are a C++11 extension [-Wc++11-extensions]
  ...class  = typename ft::enable_if<!ft::is_integral<InputIterator>::value>::type>
     ^

Не могли бы вы помочь мне адаптировать мой код для расширения c ++ 98?

...