구조체 멤버 변수를 직접 범위 for 문으로 돌려 보았습니다.

6166 단어 C++11Arduino
구조체 멤버 변수를 그대로 for로 돌릴 수 있으면 좋겠다고 생각하는 것이 있죠?
이런 식으로.
#include <iostream>

struct A{
  int aa;
  int bb;
  int cc;
};

A a {1,2,3};

int main(void){
  for(const auto& d: a){
    std::cout << d << std::endl;
  }
}

하지만 이것은 잘 작동하지 않는 것 같습니다. 파이자. 이오 에서 시도해 보았습니다.
//コンパイルエラー
Main.cpp:14:20: error: invalid range expression of type 'A'; no viable 'begin' function available
  for(const auto& d: a){
                   ^ ~
1 error generated.

화가 났습니다.

참고로 범위 for 문에 따르면

어폐를 두려워하지 말고, 멤버 함수에 begin() 및 end()를 가지는 클래스이면, 무엇이든 범위 for문의 범위로서 지정할 수 있다.

그렇기 때문에, 시작과 끝의 장소를 돌려주는 함수를 확실하게 만들어 붙여 보았습니다.
aa, bb, cc의 순서로 줄지어서, begin은 자신의 aa의 장소, end는 자신의 cc의 뒤, 라고 하는 기분입니다.
#include <iostream>

struct A{
  int aa;
  int bb;
  int cc;
  int* begin( )  {return &this->aa     ; };
  int* end( )    {return &this->cc + 1 ; };
};

A a {1,2,3};

int main(void){
  for(const auto& d: a){
    std::cout << d << std::endl;
  }
}

//出力結果
1
2
3

움직였다!

Arduino에서도 시도했습니다.

움직였다!

이것으로 다치를 정리해 처리하거나 하는 것이 조금 간단해질지도.

움직이고 있기 때문에 대단히 사용하고 싶습니다. 역시 그만뒀다. 이쪽으로 합니다. 자세한 내용은 코멘트를 참조하십시오.
#include <iostream>

struct A{
  int bb[3];
};

A a { {1,2,3} };

int main(void){
  for(const auto& d: a.bb){
    std::cout << d << std::endl;
  }
}

조금 표제와는 달리 오는데, 똑같이 할 수 있다.

거친 생각으로 하고 있으니까, 다르고, 더 좋은 방법이 있어, 라고 하는 것이 있으면 코멘트 부탁합니다.

좋은 웹페이지 즐겨찾기