Size: a a a

cxx.Дискуссионная

2020 February 27

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Рой ты сука
Да нихера непонятно
источник

AB

Artöm Bakri Al-Sarmini in cxx.Дискуссионная
Какая нахуй разница в неймспейсе функция или нет?
источник

AB

Artöm Bakri Al-Sarmini in cxx.Дискуссионная
Речь о R(*)(Args...) что ли?
источник

AB

Artöm Bakri Al-Sarmini in cxx.Дискуссионная
Обычных функиях?
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Какая нахуй разница в неймспейсе функция или нет?
Ты не понял, разница между функцией и функцией из класса же разная?
Там для захвата функции из класса нужен бинд функтора
источник

AB

Artöm Bakri Al-Sarmini in cxx.Дискуссионная
Или std::function&
источник

RM

Roy Mustang in cxx.Дискуссионная
ааа всё
источник

RM

Roy Mustang in cxx.Дискуссионная
Там же std::function, а не прямая передача
источник

RM

Roy Mustang in cxx.Дискуссионная
Мувается std::function :)
источник

RM

Roy Mustang in cxx.Дискуссионная
Тупанул
источник

RM

Roy Mustang in cxx.Дискуссионная
Значит там все правильно мувается
источник

AB

Artöm Bakri Al-Sarmini in cxx.Дискуссионная
Roy Mustang
Тогда мне не понятно вот что, я не всегда передаю функцию из класса в RegMsgCallback, вот к примеру
NetServer.RegMsgCallback(NET_SERVER_TYPE::SV_WORLD,    protoid::proto_common_clsv_relationship_register_send,    proto::proto_common_clsv_relationship_register_recv);

тут я передаю функцию из namespace, то есть, это не из класса функция, а значит вызывается RegMsgCallback перегрузка
bool RegMsgCallback(const NET_SERVER_TYPE type, const uint16_t protoid, NET_MSG_FUNCTOR&& cb);

Но почему тогда я не форвардю эту функцию если RegMsgCallback принимает && ?
Кмк ты не на ту перегрузку смотришь
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Кмк ты не на ту перегрузку смотришь
Да не, все правильно
Там есть просто объявление функции
bool RegMsgCallback(const NET_SERVER_TYPE type, const uint16_t protoid, NET_MSG_FUNCTOR&& cb);

и в том же .hpp есть перегрузка для функции из класса, которая вызывает эту же RegMsgCallback но после бинда
источник

RM

Roy Mustang in cxx.Дискуссионная
Все, я разобрался
источник

RM

Roy Mustang in cxx.Дискуссионная
Там в любом случае передается std::function который мувается
источник

AB

Artöm Bakri Al-Sarmini in cxx.Дискуссионная
Roy Mustang
Ты не понял, разница между функцией и функцией из класса же разная?
Там для захвата функции из класса нужен бинд функтора
Между чем и чем?
void f(); // function, can be casted to fptr
struct S{ void g(); } // member function, can be casted to memfunptr
источник

RM

Roy Mustang in cxx.Дискуссионная
Вот для второго случая есть в .hpp перегрузка
    template<typename BaseType>
   bool RegMsgCallback(BaseType* pBase, void (BaseType::*handleRecv)(const CNetMsg&))
   {
       NET_MSG_FUNCTOR functor = std::bind(handleRecv, pBase, std::placeholders::_1);
       return RegMsgCallback(std::move(functor));
   }
источник

RM

Roy Mustang in cxx.Дискуссионная
которая вызывает после бинда
bool RegMsgCallback(const NET_SERVER_TYPE type, const uint16_t protoid, NET_MSG_FUNCTOR&& cb);
источник

RM

Roy Mustang in cxx.Дискуссионная
@das_3sz3tt спасиб за помощь
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Я никак не разберусь в rvalue и lvalue, я понимаю, что rvalue - это все что не lvalue, а std::function по сути может быть lvalue, когда мы в него пихаем функцию?
Ты не совсем прав, читать подробно тут, а потом тут
источник