Re[9]: Амбигус оператор
От: rg45 СССР  
Дата: 14.04.25 20:28
Оценка:
Здравствуйте, Marty, Вы писали:

M>А SFINAE был уже в C++03, но я тогда не прочувствовал его в полной мере, сам тогда такого кода почти не писал, только использовал, часто не понимая, как оно работает, да и хелперов из C++11 — C++17 не было, сейчас хочу прочувствовать всё это полной ложкой


Ты просто возьми себе на заметку, что концепты имеют существенные преимущества перед SFINAE. Одним из главных преимуществ я бы назвал Partial ordering. При использовании SFINAE все перегрузки равноправны и необходимо обеспечить, чтоб все фильтры были взаимоисключающими во избежание конфликтов. При большом количестве перегрузок в таких областях как ввод-вывод, сериализация, форматирование и т.п. это иногда превращается в нехилый геморрой. Использование концептов же позволяет делать одни перегрузки более специальными, чем другие. Это очень похоже на то, как если бы мы писали перегрузки для базового и производного классов.
--
Справедливость выше закона. А человечность выше справедливости.
Re[10]: Амбигус оператор
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.04.25 20:41
Оценка:
Здравствуйте, rg45, Вы писали:

R>Ты просто возьми себе на заметку, что концепты имеют существенные преимущества перед SFINAE. Одним из главных преимуществ я бы назвал Partial ordering. При использовании SFINAE все перегрузки равноправны и необходимо обеспечить, чтоб все фильтры были взаимоисключающими во избежание конфликтов. При большом количестве перегрузок в таких областях как ввод-вывод, сериализация, форматирование и т.п. это иногда превращается в нехилый геморрой. Использование концептов же позволяет делать одни перегрузки более специальными, чем другие. Это очень похоже на то, как если бы мы писали перегрузки для базового и производного классов.


Да, спасибо, принял, буду иметь в виду. Но я пока на C++17, таки.

У меня есть проекты, которые должны, по моим представлениям, запускаться и на W2K, или хотя бы WinXP. А последняя MSVS — 2019, которая умеет в WinXP — умеет только в C++17

Ну и откушать SFINAE полной ложкой... Мои загоны...
Маньяк Робокряк колесит по городу
Re[3]: Амбигус оператор
От: _NN_  
Дата: 15.04.25 07:01
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>вот что харектерно, c++ всё есть для того чтобы иметь bigint но std::bigint нет.

_>Зато еще есть куча всяких целых спец типов __m128i __m256i __m512i
Когда решат как это сделать, тогда видимо и появится.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Амбигус оператор
От: kov_serg Россия  
Дата: 15.04.25 07:32
Оценка:
Здравствуйте, _NN_, Вы писали:

_>>вот что харектерно, c++ всё есть для того чтобы иметь bigint но std::bigint нет.

_>>Зато еще есть куча всяких целых спец типов __m128i __m256i __m512i
_NN>Когда решат как это сделать, тогда видимо и появится.
Давно надо было это сделать. Чего тянут не понятно.

а то с++ как правило делает так:
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;

int main() {
   cpp_int u=1;
   for(unsigned i=2;i<=100;i++) u*=i;
   std::cout<<u<<std::endl;
   return 0;
}
  результат для 100!
In file included from example.cpp:2:
/usr/include/boost/multiprecision/cpp_int.hpp: In instantiation of ‘struct boost::multiprecision::backends::cpp_int_base<0, 4294967295, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, std::allocator<long long unsigned int>, false>’:
/usr/include/boost/multiprecision/cpp_int.hpp:1033:8:   required from ‘struct boost::multiprecision::backends::cpp_int_backend<>’
 1033 | struct cpp_int_backend
      |        ^~~~~~~~~~~~~~~
/usr/include/boost/multiprecision/number.hpp:1671:12:   required from ‘class boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<> >’
 1671 |    Backend m_backend;
      |            ^~~~~~~~~
example:6:12:   required from here
    6 |    cpp_int u=1;
      |            ^
/usr/include/boost/multiprecision/cpp_int.hpp:172:8: error: no class template named ‘rebind’ in ‘class std::allocator<long long unsigned int>’
  172 | struct cpp_int_base<MinBits, MaxBits, signed_magnitude, Checked, Allocator, false> : private Allocator::template rebind<limb_type>::other
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/boost/multiprecision/cpp_int.hpp:174:66: error: no class template named ‘rebind’ in ‘class std::allocator<long long unsigned int>’
  174 |    typedef typename Allocator::template rebind<limb_type>::other allocator_type;
      |                                                                  ^~~~~~~~~~~~~~
Re[3]: Амбигус оператор
От: rg45 СССР  
Дата: 15.04.25 14:01
Оценка: +1 :)
Здравствуйте, kov_serg, Вы писали:

_>Можно еще вот так извернуться если не нравиться разные но одинаковые типы

_>https://godbolt.org/z/4ocTWszE5

template<class T> struct Info {
    enum {
        size=sizeof(T),
        has_sign=(T)-1<0,
        is_2complement=(1&(T)-1),
        code=size*4+has_sign*2+is_2complement
     }; 
};

template<int n>void fnc(const void* t) {
    printf("fn<code=%d> size=%d sign=%d two_comliment=%d\n",n,n/4,(n>>1)&1,n&1); 
}
template<class T>void fn(const T &t) { fnc<Info<T>::code>(&t); }


У тебя пробелы платные, что ли?
--
Справедливость выше закона. А человечность выше справедливости.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.