【问题标题】:What is the meaning of (*) in template<typename T> using L = T(*)(T);?使用 L = T(*)(T); 在 template<typename T> 中的 (*) 是什么意思?
【发布时间】:2020-08-11 08:13:33
【问题描述】:

我一直在使用这个 sn-p 代码进行一些测试,我理解它的作用,但我突然想到,我不知道 (*) 在这种情况下应该做什么......

template<typename T>
using L  = T(*)(T);

我试过删除它,没有它,代码运行得很好。我认为这可能与指针有关,但我不确定。我使用 sn-p 定义传递的 lambda 函数的参数和返回值

【问题讨论】:

    标签: c++ function c++11 templates function-pointers


    【解决方案1】:

    是的,它是一个指针类型。 T(*)(T) 是一个指向函数T(T) 的指针,它接受T 并返回T

    没有它,即T(T) 是一个函数类型。你说它也有效,因为在许多情况下它可以decay 指向指向T(*)(T) 的指针。比如你定义T(T)为函数参数类型,会调整为T(*)(T)

    函数类型 T 的 lvalue 可以隐式转换为 prvalue pointer to that function

    【讨论】:

    • 哦,我想我明白了!如果我保留(*),我可以创建像L&lt;int&gt; fp = func; 这样的函数指针,但如果我删除它,我将无法创建它。
    • @Buffer 是的,没有(*) fp 被声明为一个不能这样初始化的函数。
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多