替换为C++中删除的bind1st 17

Ram*_*mad 5 c++ c++17

我有这个用法,bind1st但我将我的项目升级到C++ 17,因为bind1st已删除.

如何bind1st在以下声明中替换?LAMBDA?

DBManager::Instance().FuncQuery(std::bind1st(std::mem_fn(&CGuild::LoadGuildData), this), "SELECT master, level, exp, name, skill_point, skill, sp, ladder_point, win, draw, loss, gold FROM guild WHERE id = %u", m_data.guild_id);
Run Code Online (Sandbox Code Playgroud)

Tam*_*ola 5

只需使用std :: bind

std::bind(std::mem_fn(&CGuild::LoadGuildData), this, std::placeholders::_1)
Run Code Online (Sandbox Code Playgroud)

您也可以删除多余的内容std::mem_fn

std::bind(&CGuild::LoadGuildData, this, std::placeholders::_1)
Run Code Online (Sandbox Code Playgroud)


Jar*_*d42 5

使用lambda,您可以替换

std::bind1st(std::mem_fn(&CGuild::LoadGuildData), this)
Run Code Online (Sandbox Code Playgroud)

通过

[this](auto&& data) {return this->LoadGuildData(data);}
Run Code Online (Sandbox Code Playgroud)

最后给出了类似的东西:

DBManager::Instance().FuncQuery(
     [this](auto&& data) {return this->LoadGuildData(data);},
     "SELECT master, level, exp, name, skill_point, skill, sp, "
     "ladder_point, win, draw, loss, gold FROM guild WHERE id = %u",
     m_data.guild_id);
Run Code Online (Sandbox Code Playgroud)

  • 您会知道的,但是我会向读者指出,在调用中不必包含`this->`,因为无论如何,在捕获`this'的lambda中的名称都会在类范围内自动查找。 (2认同)