【问题标题】:c++ applying templated function to each element of a tuplec ++将模板化函数应用于元组的每个元素
【发布时间】:2020-08-07 20:13:49
【问题描述】:
template<typename T>
void print(T& t)
{
    std::cout << t << std::endl;
}

template<typename ... Args>
class Container 
{

    public:

    Container(Args&& ... args)
    : values_(std::forward<Args>(args)...)
    {}

    template<int INDEX>
    typename std::tuple_element<INDEX, std::tuple<Args...> >::type& get()
    {
        return std::get<INDEX>(values_);
    }

    void display()
    {
        // (obviously) does not compile !
        std::apply(print,values_);
    }

    private:
    std::tuple<Args ...> values_;

};

上面的代码显示了意图但不正确(注释的地方),因为函数“print”需要一个模板。

是否有一种方法可以将(适当模板化的)打印函数调用到元组值的每个元素_?

运行代码:https://onlinegdb.com/SJ78rEibD

【问题讨论】:

    标签: c++ templates apply variadic-templates stdtuple


    【解决方案1】:

    你需要像这样将元组解压成apply

    void display()
    {
        std::apply([](auto ...ts) { (..., print(ts)); },values_);
    }
    

    这是demo

    请注意,此解决方案使用折叠表达式来简化语法。

    【讨论】:

    • 值得一提的是,花哨的语法被称为fold expression
    • @rustyx 很公平,已添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2022-01-21
    • 2021-05-25
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多