gpt4 book ai didi

c++ - 如何正确找出lambda的返回类型

转载 作者:太空狗 更新时间:2023-10-29 19:48:31 24 4
gpt4 key购买 nike

基本上如何编译以下代码?

我知道它失败了,因为编译器试图评估类似 ([](int &i){})(0) 的东西,但如何解决这个问题?

template <class TElement>
struct foo {
TElement _e;
foo(TElement e) : _e(e){}
template <class Lambda>
void bar(Lambda f) {
using TResult = decltype(std::declval<Lambda>()(std::declval<TElement>()));
}
};

int main() {

foo<int>(0).bar([](int i){}); // compile
foo<int>(0).bar([](int &&i){}); // compile
foo<int>(0).bar([](int const &i){}); // compile
foo<int>(0).bar([](int &i){}); // failed

}

最佳答案

您可以使用以下特征:

template <typename T>
struct return_type : return_type<decltype(&T::operator())>
{};
// For generic types, directly use the result of the signature of its 'operator()'

template <typename ClassType, typename ReturnType, typename... Args>
struct return_type<ReturnType(ClassType::*)(Args...) const>
{
using type = ReturnType;
};

关于c++ - 如何正确找出lambda的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com