簡體   English   中英

如何在 C++ 中使用 lambdas 作為值定義映射

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM