C++ overloading operator comma for variadic arguments

前端 未结 4 617
终归单人心
终归单人心 2021-01-02 17:52

is it possible to construct variadic arguments for function by overloading operator comma of the argument? i want to see an example how to do so.., maybe something like this

4条回答
  •  情话喂你
    2021-01-02 18:27

    It is sort-of possible, but the usage won't look very nice. For exxample:

    #include 
    #include 
    #include 
    #include 
    
    template 
    class list_of
    {
        std::vector data;
    public:
        typedef typename std::vector::const_iterator const_iterator;
        const_iterator begin() const { return data.begin(); }
        const_iterator end() const { return data.end(); }
    
        list_of& operator, (const T& t) {
            data.push_back(t);
            return *this;
        }
    };
    
    void print(const list_of& args)
    {
        std::copy(args.begin(), args.end(), std::ostream_iterator(std::cout, " "));
    }
    
    int main()
    {
        print( (list_of(), 1, 2, 3, 4, 5) );
    }
    

    This shortcoming will be fixed in C++0x where you can do:

    void print(const std::initializer_list& args)
    {
        std::copy(args.begin(), args.end(), std::ostream_iterator(std::cout, " "));
    }
    
    int main()
    {
        print( {1, 2, 3, 4, 5} );
    }
    

    or even with mixed types:

    template 
    void print(const T& t)
    {
        std::cout << t;
    }
    
    template 
    void print(const Arg1& a1, const ArgN& ...an)
    {
        std::cout << a1 << ' ';
        print(an...);
    }
    
    
    int main()
    {
        print( 1, 2.4, 'u', "hello world" );
    }
    

提交回复
热议问题