這是我的代碼。調用映射鍵調用需要參數的函數 - 如何獲得工作
#include <map>
#include <string>
#include <algorithm>
class maptest {
public:
int doubler(int val) { return val * 2; }
int halver(int val) { return val/2; }
int negativer(int val) { return val > 0 ? -val : val; }
};
int main() {
const char* const ID[] = {"doubler", "halver", "negativer" };
int ID_SIZE = sizeof(ID)/sizeof(*ID);
//signature of maths functions
typedef int (maptest::*mathfunc)(int);
mathfunc mfuncs[] = { &maptest::doubler, &maptest::halver, &maptest::negativer};
std::map<std::string, mathfunc> mathmap;
for(int i = 0; i < ID_SIZE; ++i) {
mathmap.insert(std::make_pair(ID[i], mfuncs[i]));
}
//C2064: term does not evaluate to a function taking 1 argument
int result = *mathmap["doubler"](3);
return 0;
}
我認爲這將工作,如果沒有參數傳遞給函數。但是,如何以這種方式傳遞參數?
(mt。*(mathmap [「doubler」]))的包圍很混亂。爲什麼你需要外部包圍,即這裏的括號:(mt。*(mathmap [「doubler」]))? –
@ user619818:這不是必需的,我只是認爲它使事情更清晰。也許我錯了;) –
在我的VS2008編譯器上它是需要的。不管。 –