[c++] 단일 함수로 다른 함수에 대한 여러 인수를 반환합니다.



2 Answers

C ++에서는 다른 함수에 대한 3 개의 개별 입력 인수로 사용할 수있는 기본적으로 3 개의 반환 값을 제공 할 수 없습니다.

그러나 여러 값을 반환하는 '트릭'이 있습니다. length() 를 수정하지 않고 length() 대한 단일 인수로 사용할 수 없으므로 이들 중 어느 것도 완벽한 솔루션을 제공하지는 못합니다.

struct , tuple 또는 class 와 같은 컨테이너 객체 사용

typedef struct { int a,b,c; } myContainer;

myContainer arguments(int x, int y, int z) {
  myContainer result;
  result.a = 1;
  // etc
  return result;
}

myContainer c = arguments(x, y, z);
length(c.a, c.b, c.c);

트릭은 length() 함수를 오버로드하는 것이므로 단일 인수와 함께 사용할 수있는 것처럼 보입니다.

void length(myContainer c) {
  length(c.a, c.b, c.c);
}

length(arguments());

물론 inline , 매크로 등을 사용하여 더 이상 최적화 할 수 있습니다.

나는 그것이 당신이 원하는 정확히는 여전히 아니지만, 이것이 가장 가까운 접근이라고 생각합니다.

Question

이 질문은 오해의 소지가있는 질문 제목을 선택한 이후 정확한 복제본으로 마감되었습니다. 그것은 잘못이 아니었지만 종종 이 문제 에서 논의 된 문제를 제안했습니다. 내용은 에서 다룰 수없는 특정 주제에 관한 것이므로 다시 열어야합니다. 이것은 지금 일어 났으므로 여기에 질문이갑니다.

세 정수 값을 매개 변수로 기대하는 함수를 제공했습니다. length(int x, int y, int z); . 나는이 함수를 수정할 수 없다. 예를 들어 단일 매개 변수의 구조체 나 튜플을 받아 들일 수있다.

C ++에서 length(arguments()); 와 같이 위의 함수에 대한 단일 인수로 사용할 수있는 다른 함수를 작성하는 방법이 있습니까? ?

아무튼 그 함수의 반환 형식 arguments(); int, int, int 필요가있는 것 같습니다. 하지만 지금까지 내가 아는 한 C ++에서 이와 같은 함수를 정의하고 사용할 수는 없습니다. arguments() 의해 목록, 튜플, 구조체 또는 클래스를 반환 할 수 있다는 것을 알고 있습니다. 어떤 사람들은 내가 이것에 대해 물어볼 것이라고 생각했기 때문에 질문은 닫혔다. 그러나 어려운 부분은 세 개의 정수 매개 변수로서 튜플 또는 구조체를 전달하는 것입니다.

이것이 가능합니까? 그렇다면 C ++에서 어떻게 가능합니까? C ++ 11을 사용하는 솔루션이 좋을 것입니다.




우리는 단지 하나의 값을 반환 할 수 있습니다. 하지만 여러 값을 반환하려는 경우 배열을 사용하거나 객체 또는 구조체를 정의 할 수 있습니다

    int* arguments() {
        int x[1,4,6] 
        return x;
    };

    void length(int i[]);

    length(arguments());



대부분의 프로그래밍 언어는 일종의 어댑터 기능을 통해이를 수행합니다. 함수를 호출 할 함수 (여기서는 length )와 인수를 인수로 취할 함수입니다. 템플릿으로 C ++과 비슷한 것을 만들 수 있습니다. 영감을 얻으려면 functional 헤더를보십시오.

원하는 언어를 기본적으로 제공하는 언어는 Perl입니다. 당신은 쓸 수 있습니다:

sub arguments {
    return 1, 2, 3;
}
sub length {
    my ($p1, $p2, $p3) = @_;
    # … Work with $p1, $p2 and $p3
}
length(arguments());


Related