【问题标题】:How to remove elements from variadic template argument?如何从可变参数模板参数中删除元素?
【发布时间】:2019-04-28 01:21:55
【问题描述】:

我正在尝试删除可变参数模板参数的第一个元素。 代码如下:

template<typename ...T>
auto UniversalHook(T... args)
{
    //I want to remove the first element of `args` here, how can I do that?
    CallToOtherFunction(std::forward<T>(args)...);
}

【问题讨论】:

    标签: c++ visual-c++ c++17 variadic-templates


    【解决方案1】:

    试试直接方法怎么样。

    template<typename IgnoreMe, typename ...T>
    auto UniversalHook(IgnoreMe && iamignored, T && ...args)
    {
        //I want to remove the first element of `args` here, how can I do that?
        return CallToOtherFunction(std::forward<T>(args)...);
    }
    

    (也固定使用转发引用,并添加了明显的return

    【讨论】:

    • 我忘了说,我不能修改函数的参数,也不需要返回类型,因为函数也可以没有返回类型。谢谢你的回复!另外,我刚从其他人那里得到了帮助,他给了我一些工作代码。
    【解决方案2】:

    我刚刚得到了一点帮助,并找到了解决方案:

    int main()
    {
        Function(3,5,7);
        return 0;
    }
    template<typename ...T>
    auto CallToAnotherFunction(T&&... args) 
    {
        (cout << ... << args);
    }
    
    template<typename ...T>
    auto Function(T&&... args) {
        /*Return is not needed here*/return [](auto&& /*first*/, auto&&... args_){ 
            return CallToAnotherFunction(std::forward<decltype(args_)>(args_)...); 
        }(std::forward<T>(args)...);
    }
    
    //Output is "57"
    

    【讨论】:

      猜你喜欢
      • 2017-07-11
      • 2016-12-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多