将函数指针作为向量传递<对<字符串,X>> X 参数

Passing function pointer as vector<pair<string,X>> X argument

本文关键字:gt lt 字符串 参数 函数 指针 向量      更新时间:2023-10-16

下面是一些代码:

// Unit.h
typedef void (IInteractable::*fPtr)(Player&);
typedef std::vector<std::pair<std::string, fPtr>> Actions;

// Unit.cpp
Actions Unit::getActions()
{
    Actions a;
    a.push_back(make_pair("Attack", &Unit::attack));
    return a;
}
void attack(Player& p)
{
    cout << "Attack!" << endl;
}

我得到的是error: no matching function for call to ‘std::vector<std::pair<std::basic_string<char>, void (IInteractable::*)(Player&)> >::push_back(std::pair<const char*, void (Unit::*)(Player&)>)’这似乎很奇怪,因为单位继承自 IInteractable。我花了一些时间才使这个问题变得如此"简单",但我不知道下一步该怎么做。谁能帮忙?

您需要指定&IInteractable::attack,而不是&Unit::attack需要IInteractable成员的位置。指向重写的派生类函数的指针不会转换为指向基类函数的相应指针,即使人们可能期望这种转换有意义。