У меня есть эта функция:
void CGuild::AddComment(LPCHARACTER ch, const std::string& str)
{ if (str.length() > GUILD_COMMENT_MAX_LEN)
return;
char text[GUILD_COMMENT_MAX_LEN * 2 + 1];
DBManager::instance().EscapeString(text, sizeof(text), str.c_str(), str.length());
DBManager::instance().FuncAfterQuery(void_bind([this](auto&& data) { return this->RefreshCommentForce(data); }, ch->GetPlayerID()),
"INSERT INTO guild_comment%s(guild_id, name, notice, content, time) VALUES(%u, '%s', %d, '%s', NOW())",
get_table_postfix(), m_data.guild_id, ch->GetName(), (str[0] == '!') ? 1 : 0, text);
}
, и я компилирую с помощью clang ++ - разработка на C ++ 1z, в среде Linux.Файл генерирует эту ошибку:
./any_function.h:41:15: error: no type named 'argument_type' in '(lambda at
guild.cpp:1023:49)'
typename F::argument_type value;
~~~~~~~~~~~~^~~~~~~~~~~~~
guild.cpp:1023:39: note: in instantiation of template class 'void_binder<(lambda
at guild.cpp:1023:49)>' requested here
DBManager::instance().FuncAfterQuery(void_bind([this](auto&& dat...
^
, а вот any_function.h:
template <class F>
class void_binder
{
protected:
F f;
typename F::argument_type value;
public:
void_binder(const F& f, const typename F::argument_type x)
: f(f), value(x) {}
void operator()() const {
return f(value);
}
};
template <class F, class Arg>
inline void_binder<F> void_bind(const F& f, const Arg& arg)
{
typedef typename F::argument_type arg_type;
return void_binder<F>(f, arg_type(arg));
}
Как я могу устранить эту ошибку?
Спасибо за ваши комментарии.