我有一个以字符串为键的地图并存储 lambda。
到目前为止我已经尝试过
std::map <int, auto> callbackMap
并在没有相同数字的地方放置一个 lambda。这可能吗 ?我不断收到错误说函数不能将 auto 作为构造函数。
我有一个以字符串为键的地图并存储 lambda。
到目前为止我已经尝试过
std::map <int, auto> callbackMap
并在没有相同数字的地方放置一个 lambda。这可能吗 ?我不断收到错误说函数不能将 auto 作为构造函数。
这是因为auto
它只是一个编译时“功能”,可以将您需要的类型转换为非常定义的类型!您可能会将它与“变体”类型混淆......它不是这样工作的。
auto X = 3;
这并不意味着X
是“变体”。就像编译器将其转换为:
int X = 3;
所以,请注意它X
有一个非常明确的类型。
您可以在地图中存储函数(lambda 是运算符),没问题。但与你std::function<...>
非常明确。例子:
std::map< int, std::function< int( int ) > > callbackMap;
callbackMap[ 0 ] = std::function< int( int ) >( [] ( int a ) { return a + 1; } );
callbackMap[ 1 ] = std::function< int( int ) >( [] ( int a ) { return a - 1; } );
callbackMap[ 2 ] = std::function< int( int ) >( [] ( int a ) { return a * 2; } );
callbackMap[ 3 ] = std::function< int( int ) >( [] ( int a ) { return a / 2; } );
请注意,您仍然需要知道函数的签名......(在我的示例int( int a )
中,但您当然可以定义您想要的方式)。
如果您决定存储“指向函数的指针”,您将遇到同样的问题。你必须知道签名!没什么不同。