【问题标题】:Way to Only Pass Second Template Parameter仅传递第二个模板参数的方法
【发布时间】:2019-07-08 16:42:19
【问题描述】:

所以我有一个模板函数,它有一个默认的 2nd 参数。可以推导出它的 1st 参数,因此类似于:

template <typename F, typename S = int>
void foo(const F param)

这在一般情况下可以正常工作,我只需致电foo(bar)。但是在我想指定第二个参数的情况下,我不能这样做:foo&lt;char&gt;(bar),因为char 被视为F。显然情况并非如此,因为bar 不是char,所以F 应该是可推导出的。

有没有一种方法可以在这里只传递一个模板参数,该参数将应用于S,仍然推导出F,并且在一般情况下仍然默认S

【问题讨论】:

    标签: c++ templates parameter-passing template-argument-deduction default-arguments


    【解决方案1】:

    只需重新排序模板参数:

    template <typename S = int, typename F>
    void foo(const F param);
    

    模板可以在任何地方有默认值。最后,应提供、默认或推导所有模板参数。

    【讨论】:

    • 也许您可以评论一下,不仅可以为尾随模板参数提供默认值,这与函数参数的情况不同。
    • 我已经接受了这一点,但正如其他 cmets 所提到的,我希望能稍微解释一下为什么这对函数不起作用,而与模板的情况相比。
    • 在这两种情况下,最后都应该知道所有参数。模板允许推导,而函数没有指定/推导“稍后”参数的方法。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多