我想使用模板来创建一个用于理解概念的映射,但是我收到一个错误,并且无法理解我在做什么错误。使用地图模板函数指针
任何人都可以看看,让我知道我做错了什么?如果可能的话,请分享一个设计的实例,我真的很感激。
感谢
#include <iostream>
#include <map>
using namespace std;
enum MathOperations
{
ADD = 0,
SUBTRACT,
MULTIPLY,
DIVISION
};
template <typename T>
T Addition(T a, T b)
{
return a + b;
}
template <typename T>
T Subtraction(T a, T b)
{
return a - b;
}
template <typename T>
struct MathOp
{
typedef T (*FuncPtr) (T, T);
};
/* I am getting a warning here, which says variable templates are c++1 extension */
template <typename T>
const std::map<MathOperations, typename MathOp<T>::FuncPtr> MathMap = {
{ MathOperations::ADD, &Addition<T> },
{ MathOperations::SUBTRACT, &Subtraction<T> }
};
int main()
{
MathOp<int> mathIntObj;
/* I am getting error here */
/* No viable overloaded operator[] for type 'const std::map<MathOperations, typename MathOp<int>::FuncPtr>' */
std::cout << *(MathMap<int>[MathOperations::ADD])(1, 2) << endl;
return 0;
}
编辑: 感谢@Piotr Skotnicki,谁分享了我的错误的解决方案。 我不得不做出如下改变:
std::cout << (*MathMap<int>.at(MathOperations::ADD))(1, 2) << endl;
删除
MathOp<int> mathIntObj;
不过,我需要修复的警告。有任何想法吗 ?由于
能否请您复制/粘贴错误消息?这将是有益的。 – Quentin
map :: operator []' –
没有const超载这里是错误:没有可行的重载操作符[]为类型'const std :: map :: FuncPtr>'sc - 201702190978谢谢 –