【发布时间】:2017-01-13 06:52:36
【问题描述】:
在 C++14 中可以自动推断返回类型,但我正在尝试在 C++11 中编写类似的东西,即
如果我用 C++14 编写,那就是
struct MyTypeA{
std::vector<int> _d;
};
struct MyTypeB{
int _id;
std::string _name;
MyTypeA _data;
};
decltype(auto) MakeObject(const MyTypeA& obj) {
return std::make_tuple(obj._vec);
}
decltype(auto) MakeObject(const MyTypeB& obj) {
return std::make_tuple(obj._id, obj._name, std::make_tuple(MakeObject(obj._data)));
}
上面是C++14,我可以在C++11中重写MakeObject类似的东西,如下所示,
auto MakeObject (const MyTypeA& obj) -> decltype( std::make_tuple(obj._d)){
return std::make_tuple(obj._d);
};
auto MakeObject (const MyTypeB& obj) -> decltype( std::make_tuple(obj._id, obj._name, std::make_tuple(MakeObject(obj._data)))){
return std::make_tuple(obj._id, obj._name, std::make_tuple(MakeObject(obj._data)));
};
如您所见,我有一堆重载的非成员函数。虽然这可行,但它似乎非常冗长和冗余的代码。在 C++11 中有没有更好的方法来做到这一点?
【问题讨论】:
-
您提到了 lambda,但我在您的问题中看不到一个 lambda。您的意思是“尾随返回类型”吗?
-
我不太明白你对 lambdas 的看法。您发布的代码没有使用任何 lambda 函数。如果 lambdas(没有命名函数)对您来说足够了,您可以轻松使用它们,因为如果 c++11 中只有一个 return 语句,它们已经具有自动返回类型推导。
-
对不起,伙计们。我的错,我粘贴了非 lambda 代码并忘记更改文本。我没有使用 lambda
标签: c++ c++11 c++14 auto decltype