C++ 20 模块

#include "stdafx.h"

                    import std.core;
                    import M;
                    
                    using namespace M;
                    
                    int main()
                    {
                        std::vector vec;
                        std::list list;
                        vec.push_back(1);
                        
                        int temp = M::test(100);
                        printf("%d\n", temp);
                    
                        return 0;
                    }

C++ 17 apply

namespace detail {
                    template 
                    constexpr decltype(auto) apply_impl(F&& f, Tuple&& t, std::index_sequence)
                    {
                        return std::invoke(std::forward(f), std::get(std::forward(t))...);
                    }
                    }  // namespace detail
                     
                    template 
                    constexpr decltype(auto) apply(F&& f, Tuple&& t)
                    {
                        return detail::apply_impl(
                            std::forward(f), std::forward(t),
                            std::make_index_sequence>>{});
                    }

std::forward 完美转发

                    struct A {
                        A(int&& n) { std::cout << "rvalue overload, n=" << n << "\n"; }
                        A(int& n)  { std::cout << "lvalue overload, n=" << n << "\n"; }
                    };
                     
                    class B {
                    public:
                        template
                        B(T1&& t1, T2&& t2, T3&& t3) :
                            a1_{std::forward(t1)},
                            a2_{std::forward(t2)},
                            a3_{std::forward(t3)}
                        {
                        }
                     
                    private:
                        A a1_, a2_, a3_;
                    };
                     
                    template
                    std::unique_ptr make_unique1(U&& u)
                    {
                        return std::unique_ptr(new T(std::forward(u)));
                    }
                     
                    template
                    std::unique_ptr make_unique2(U&&... u)
                    {
                        return std::unique_ptr(new T(std::forward(u)...));
                    }
                     
                    int main()
                    {   
                        auto p1 = make_unique1(2); // rvalue
                        int i = 1;
                        auto p2 = make_unique1(i); // lvalue
                     
                        std::cout << "B\n";
                        auto t = make_unique2(2, i, 3);
                    }
                

备案号:京ICP备19011482号-1