1

リストの割り当てをキャッチするには、どの演算子をオーバーロードする必要がありますか

whatever myints[] = {32,71,12,45,26,80,53,33};

例があればいいですか?割り当てをオーバーロードする場合、受け取っている引数の型は何ですか?

編集: おお、それはコンストラクタです。リストはどのような型ですか?

Edit2:したがって、次のようになります( http://en.cppreference.com/w/cpp/utility/initializer_listから)

S(std::initializer_list<T> l) : v(l) {
 std::cout << "constructed with a " << l.size() << "-element list\n";
}

右?

4

1 に答える 1

2

を取るコンストラクタを定義したいとしますstd::initialize_list<int>。例えば:

MadeFromList.h

#ifndef _MADE_FROM_LIST_H_
#define _MADE_FROM_LIST_H_

#include <vector>
#include <ostream>
#include <initializer_list>

class MadeFromList {
public:
    MadeFromList(const std::initializer_list<int>& integers) :
        myVector(integers)
    {}
private:
    std::vector<int> myVector;

    friend std::ostream& operator<<(std::ostream&, const MadeFromList&);
};

std::ostream& operator<<(std::ostream& outputStream,
                         const MadeFromList& mfl)
{
    for (int x : mfl.myVector)
    {
        outputStream << x << " ";
    }
    return outputStream;
}
#endif

main.cpp

#include "MadeFromList.h"
#include <iostream>

int main()
{
    MadeFromList myListObject = {32, 71, 12, 45, 26, 80, 53, 33};
    std::cout << myListObject << std::endl;
    return 0;
}

これをコンパイルして実行します:

g++ -std=c++0x -W -Wall -Wextra -pedantic -o test main.cpp 
./test

出力を与えます:

32 71 12 45 26 80 53 33 

賢明な言葉: この機能は C++11 の新機能です。

于 2013-04-20T16:54:00.487 に答える