【问题标题】:How can I call function from a map?如何从地图中调用函数?
【发布时间】:2016-02-18 15:34:23
【问题描述】:

我想知道如何(如果可以的话)输出(调用)函数的功能。我想要 1, UP 输出。这是我导师的新任务。在现实生活示例中练习回调功能。 (我开始制作一个小游戏)。

#include <functional>
#include <iostream>
#include <string.h>
#include <map>

using namespace std;


void up (){

    cout<<"UP";
}

void down (){

    cout<<"DOWN";
}

void left (){

    cout<<"LEFT";
}
void right (){

    cout<<"RIGHT";
}


int main (){

   typedef map<int, void (*)()> mapaF;

    mapaF Kretnje;

    Kretnje.insert(pair<int,void (*)() >(1, up));
//    Kretnje.insert(pair<int, void (*)()>(2, down));
//    Kretnje.insert(pair<int, void (*)()>(3, left));
//    Kretnje.insert(pair<int, void (*)()>(4, right));

    for(auto a: Kretnje){
        cout<<"Kljuc: "<<a.first<<", Funkcija: "<<a.second<<endl;

    }
    //output 1, 1(?))
    return 0;
}

【问题讨论】:

  • 我们用()操作符调用函数。

标签: c++ function pointers dictionary


【解决方案1】:

你可以在上面使用相同的函数调用语法()

for (auto a : Kretnje)
    a.second(); //UP

请记住,调用该函数会返回void,因此您不能在cout 链中调用它。

std::cout << a.first << a.second(); //error, a.second() is void

【讨论】:

  • 我怀疑这些函数只是占位符,否则您可以建议解决返回值问题的最简单方法是将它们更改为:std::string up( ){ return "UP"; }
猜你喜欢
  • 1970-01-01
  • 2022-06-20
  • 1970-01-01
  • 2018-04-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2019-09-07
相关资源
最近更新 更多