Я новичок на C++ и имею проблему относительно std:map
с указателями функций.Использование указателей функций в std :: map
Я создал map
, который имеет в качестве ключа string
и хранит указатель функции как значение. Я столкнулся с осложнением, когда попытался использовать функцию insert()
, чтобы добавить указатель на функцию. Однако он работал, когда я использовал []
оператора. Если можете, объясните это различие.
Вот пример кода, который я написал.
OperatorFactory.h
#ifndef OPERATORFACTORY_H
#define OPERATORFACTORY_H
#include <string>
#include <map>
using namespace std;
class OperatorFactory
{
public:
static bool AddOperator(string sOperator, void* (*fSolvingFunction)(void*));
static bool RemoveOperator(string sOperator);
static void RemoveAllOperators();
private:
static map<string , void* (*) (void*)> map_OperatorMap;
};
// Static member re-declaration
map<string, void* (*) (void*)> OperatorFactory::map_OperatorMap;
#endif // OPERATORFACTORY_H
OperatorFactory.cpp
#include "OperatorFactory.h"
void OperatorFactory::RemoveAllOperators()
{
map_OperatorMap.clear();
}
bool OperatorFactory::RemoveOperator(string sOperator)
{
return map_OperatorMap.erase(sOperator) != 0;
}
bool OperatorFactory::AddOperator(string sOperator, void* (*fSolvingFunction)(void*))
{
// This line works well.
map_OperatorMap[sOperator] = fSolvingFunction;
// But this line doesn't.
// map_OperatorMap.insert(sOperator, fSolvingFunction); // Error
return true;
}
Ошибка говорит:
error: no matching function for call to 'std::map<std::basic_string<char>, void* (*)(void*)>::insert(std::string&, void* (*&)(void*))'
Даже если я получил эту работу (скомпилированный) с []
, я хотел бы знать, почему у меня возникла ошибка при использовании insert()
.
спасибо.
Great .. !!! Большое спасибо..! –