lambda的显式用户定义转换运算符

时间:2015-10-21 20:52:57

标签: c++ lambda function-pointers implicit-conversion conversion-operator

The article致力于lambda函数,特别是对ClosureType::operator ret(*)(params)()的讨论。在文章中,操作员称之为"一个通用的无捕获lambda用户定义的转换函数模板。"

给定代码(自动转换为适当类型的函数指针):

#include <iostream>
#include <cstdlib>

#if 0

template< typename L, typename R, typename ...A >
constexpr
auto 
to_function_pointer(L l, R (L::*)(A...) const)
{
    return static_cast< R (*)(A...) >(l);
}

template< typename L, typename R, typename ...A >
constexpr
auto 
to_function_pointer(L l, R (L::*)(A...))
{
    return static_cast< R (*)(A...) >(l);
}

template< typename L >
constexpr
auto 
to_function_pointer(L l)
{
    return to_function_pointer(l, &L::operator ());
}

#endif

template< typename R, typename ...A >
constexpr
auto
to_function_pointer(R (* fp)(A...))
{
    return fp;
}

namespace
{

void f() { std::cout << __PRETTY_FUNCTION__ << std::endl; }

}

int main()
{
    to_function_pointer(f)();
    to_function_pointer(&f)();
    to_function_pointer([] () { std::cout << __PRETTY_FUNCTION__ << std::endl; })();
    to_function_pointer([] () mutable { std::cout << __PRETTY_FUNCTION__ << std::endl; })();
    return EXIT_SUCCESS;
}

对于代码中的#if 0函数to_function_pointer,无法将lambda转换为相应的函数指针。这是否意味着所提到的运营商是&#34;隐含地&#34;以explicit关键字标记?标准中是否有相应的条款?

0 个答案:

没有答案