[英]How to define a map with lambdas as values in C++
我收到以下錯誤:
braced initialization of a variable declared with a placeholder type but without `=` requires exactly one element inside the braces
const auto temperature_units{
{"K", [] (double x)->double {return x;}},
{"C", [] (double x)->double {return x+273.15;}},
{"\u2103", [] (double x)->double {return x+273.15;}}, // degree celcius symbol
{"\u00B0C", [] (double x)->double {return x+273.15;}}, // degree symbol plus C
{"F", [] (double x)->double {return (x+459.67)*5.0/9.0;}},
{"\u2109", [] (double x)->double {return (x+459.67)*5.0/9.0;}},// degree fahrenheit symbol
{"\u00B0F", [] (double x)->double {return (x+459.67)*5.0/9.0;}}
};
就像是
const std::map<std::string, auto> temperature_units{
{"K", [] (double x)->double {return x;}},
{"C", [] (double x)->double {return x+273.15;}},
{"\u2103", [] (double x)->double {return x+273.15;}}, // degree celcius symbol
{"\u00B0C", [] (double x)->double {return x+273.15;}}, // degree symbol plus C
{"F", [] (double x)->double {return (x+459.67)*5.0/9.0;}},
{"\u2109", [] (double x)->double {return (x+459.67)*5.0/9.0;}},// degree fahrenheit symbol
{"\u00B0F", [] (double x)->double {return (x+459.67)*5.0/9.0;}}
};
也不起作用,因為這是error: invalid use of 'auto
顯然error: invalid use of 'auto
。 我不知道如何寫這個,因為顯然 lambdas 沒有定義的類型
using namespace std::literals;
const std::map temperature_units {
std::make_pair("K"s, std::function<double(double)>{[] (double x)->double {return x;}}),
{"C"s, [] (double x)->double {return x+273.15;}},
{"\u2103"s, [] (double x)->double {return x+273.15;}}, // degree celcius symbol
{"\u00B0C"s, [] (double x)->double {return x+273.15;}}, // degree symbol plus C
{"F"s, [] (double x)->double {return (x+459.67)*5.0/9.0;}},
{"\u2109"s, [] (double x)->double {return (x+459.67)*5.0/9.0;}},// degree fahrenheit symbol
{"\u00B0F"s, [] (double x)->double {return (x+459.67)*5.0/9.0;}}
};
https://godbolt.org/z/M5er48一些變化https://godbolt.org/z/ozqG56
所以基本上問題是強制執行正確類型的初始化列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.