Albert
в Manjaro Linux x64
🦥Alex Fails
Если в битах, то да. В байтах 8
Albert
а само это число в limits.h хранится или где-то в другом месте?
🦥Alex Fails
https://gcc.gnu.org/onlinedocs/cpp/Macros.html#Macros - тут покури
🦥Alex Fails
еще в интернетах говорят про stubs-32.h
🦥Alex Fails
http://stackoverflow.com/questions/30728608/role-of-wordsize-in-compilation
Albert
спасибо
Andrei
Sizeof(ptrdiff_t) например
Andrei
А ну да, если для макросов надо.
Aleksey
Stanislav
господа template<typename T, typename U> constexpr size_t offsetOf(U T::*member) { return (ptrdiff_t)&((T*)nullptr->*member) - (ptrdiff_t)nullptr; } template<typename T, typename U> void foo(U T::*member) { // offset( ??? ) // some other staff } как тут в оффсет параметры передать?
Stanislav
вызывается offsetOf(&Struct::value)
Andrei
Привет.
Andrei
Что ты имеешь в виду?
Andrei
Страная конструкция вызывать -nullptr
Stanislav
ну параметры из foo передать в offset
🦥Alex Fails
offsetOf<Struct, decltype(Struct::value)>
Andrei
Берешь и передаёшь, лол.
🦥Alex Fails
алсо, я бы тип не передавал, а делал внутри шаблона decltype
Andrei
Просто напиши специализацию которую вызываешь.
Andrei
И да, staff это сотрдуники, ты имел в виду stuff :3
Stanislav
ой да пофиг) главное все поняли)
Stanislav
ах, все
Stanislav
template<typename T, typename U> size_t offsetOf(U T::*member) { return (ptrdiff_t)&((T*)nullptr->*member) - (ptrdiff_t)nullptr; } template<typename T, typename U> U deserialize_field(const unsigned char *data, U T::*member) { size_t offset = offsetOf<T, U>(member); U tmp = *(U*)&data[offset]; return tmp; } value = deserialize_field(some_data, &Struct::value) как то так вышло :D
Stanislav
наверн не оч
Ned
🦥Alex Fails
мммм... гитхаб...
Stanislav
😂 т.е. вживую не виделись
Ned
Господа, передаю в функцию две ссылки на массивы double
Sergey
вааабщета для mac users должны были быть 2 парня
Ned
/files/Coding/SLU_MPI/main.cpp:137: error: invalid initialization of non-const reference of type 'double*&' from an rvalue of type 'double*' swapArr(N, &myA[local_i*N], myA+maxstr*N); ^
Sergey
))))))))))))000000000000000
🦥Alex Fails
😂
Ned
почему такая ошибка?
Anonymous
почему такая ошибка?
Из-за прокладки между компом и стулом
Sergey
пиздец
Ned
где лажа-то?
Ned
я уже не знаю, как ухищряться
Ned
надо поменять местами два массива одинаковой длины
🦥Alex Fails
почему такая ошибка?
myA какого типа Проблема: #cpp #beginner #references #pointers #lvalue #rvalue
Sergey
Покажи объявление функции
Ned
double *
Anonymous
Вот это помощь
Пусть прокладку поменяет и заработает
Ned
да хоть весь код
Ned
Ned
строка 136 - ошибка
Ned
ни так ни так не пашет
Ned
по стилю, плиз, засирайте потом, мне нужно это срочно доделать
🦥Alex Fails
ща гляну
Sergey
Функция - void swapArr(const int N, double *&A, double *&B double *myA - твой массив Ты передаешь &myA[local_i*N]
Ned
да
Ned
она наверху реализована
🦥Alex Fails
а зачем ссылка на double*?
🦥Alex Fails
можно ж просто double*
Ned
затем чтобы поменял в итоге массивы
Ned
а вот не канает иначе
🦥Alex Fails
ну, у тебя указатель считается из операции &
Sergey
+
🦥Alex Fails
поэтому у тебя получается то, что надо присваивать в правой части (то самое rvalue)
🦥Alex Fails
а по ссылке можно передавать только то, во что можно положить (то, что в присваивании слева написано, или lvalue)
Stanislav
std::swap то чем не угодил? массивы умеет
🦥Alex Fails
(Криво пояснил, но как-то так)
Ned
дада но пусть пока будет так
Ned
то есть без ссылок он их поменяет?
Sergey
убери ссылку
Ned
а теперь нужно понять, почему это делается так. у меня там выше есть вызов int readMatrix(int &N, double *&A, double *&B);
Ned
собсно внутри которой А и B инициализируются через new
🦥Alex Fails
строка 136 - ошибка
Та ли это строчка: if ((rank == pmax)&&(rank == i%size)){
Ned
если ссылки в ридматриксе нет, она их не инициализирует
Ned
если мы передаём аргумент в функцию, она его копирует, верно?
🦥Alex Fails
если не по ссылке
Sergey
да
Ned
если передаем указатель на него, она копирует, но он будет указывать на то же
Sergey
через стек
Ned
если ссылку на что-то, она его не копирует