c ++ decltype如何使用来简化变量定义

时间:2017-08-20 06:59:08

标签: c++ c++11

说,我在我的一个类中有这段代码定义了

  • 密钥和其他地图的地图
  • 第二个映射是另一个键和函数处理程序
  • 函数hander是一个签名,需要2个参数

现在,定义变量的签名看起来令人难以置信。

std::map<std::string, std::map<std::string,
    std::function<void(std::shared_ptr<HTTPRequest>,
        std::shared_ptr<HTTPResponse>)>>> routeFunctions_;

我最近了解了decltype,但无法正确使用它。

decltype(x) routeFunctions_;  // What should be there in the place of x ?

2 个答案:

答案 0 :(得分:3)

  • 如果您经常声明变量,请使用typedef此类型。
  • 如果您想从函数中返回此类型的值,请使用autodecltype
  • 如果您想获得结构/类成员的类型,请使用decltype

看看这篇文章:

http://en.cppreference.com/w/cpp/language/auto http://en.cppreference.com/w/cpp/language/decltype

http://www.cprogramming.com/c++11/c++11-auto-decltype-return-value-after-function.html

在这种情况下,您的选择是typedef

typedef std::map<std::string, std::map<std::string,
std::function<void(std::shared_ptr<HTTPRequest>,
std::shared_ptr<HTTPResponse>)>>> RouteFunctionsContainer;

RouteFunctionsContainer routeFunctions_;

答案 1 :(得分:0)

您在其中放置了一个与您想要的新变量类型相同的变量名称。

int x = 3;
decltype(x) y = 5; // y is an int because x is an int

您可以假装变量的类型在语法上替换源代码中的decltype。

直播:https://godbolt.org/g/6uzoJH