自动扣除,可以在C++ 14,但我试图写一些类似C++ 11即decltype(自动)在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。你的意思是“追溯返回类型”吗? – Angew
我不太明白你对lambdas的看法。您发布的代码不使用任何lambda函数。如果lambdas(没有命名函数)对您来说已经足够,您可以轻松使用它们,因为如果在C++ 11中只有一个返回语句,它们已经具有自动返回类型推演。 –
对不起。我的坏,我粘贴非lambda代码,忘记改变文本。我完全没有使用lambda – blueskin