2009-08-31 3 views
2

나는 이것을 묻는 방법을 잘 모른다. 함수의 인수를 위치별로 참조 하시겠습니까?

내가 함수

void myFunc (int8 foo, float bar, int whatever) 
{ 
... 
} 

의 위치에 의해 특정 인수를 참조하는 빠른 방법이 있다고 가정 해?

void myFunc (float foo, float bar, float whatever) 
{ 
    float f; 
    f = ARG[1]; // f now equals bar 
} 

그런 효과가 있습니까?

후속 :

답장을 보내 주셔서 감사합니다. 나는 그것이 잘못 될 것이라고 생각한다. C++이 perl과 psuedo 언어 (특히 AutoIt을 생각하고있다)처럼 이것을 허용하지 않는다는 것이 이상하다. 그래서 "왜"에 관해서? 간단한 루프 만 사용하면됩니다. 나는 정상적인 상황에서 이것을 달성하는 더 좋은 방법이 무수히 많다는 것을 알고 있지만, 내 작은 세상 밖에서 다른 사람의 코드를 수정하지 않으려 고 노력했다. 즉, 호출 코드를 제어 할 수 없습니다. 그것은 목구멍으로 입력을 밀어 내고 가능한 한 최선을 다해 관리해야합니다. 그래서 나는 함수를 호출하기 전에 반복 할 수 없습니다. 어쨌든 분명히 혼란 스러울 것이고 많은 변수가 없어서 코드를 복제했습니다. 별로. 의견과 흥미로운 제안에 감사드립니다.

+1

'new'는 방법으로, 유효한 변수 이름이 아닙니다. – GManNickG

+4

일반적으로 그렇게 할 이유가 없기 때문에 그렇지 않습니다. 왜 당신이 필요하다고 생각하는지 설명해야한다면 대안을 제안 할 수 있습니다. – moonshadow

+0

그냥 float temp = bar; – ThePosey

답변

2

는, 당신은 매개 변수로 배열을 전달할 수 있습니다.

void myFunc (float foo[3]) 
{ 
    float bar; 
    bar = foo[1]; 
} 
배열 그래서 더 나은 솔루션이 같은 const를 참조를 사용하는 것, 더 긴 경우 비효율적 일 수 있습니다

:

void myFunc (const float & foo[3]) 
{ 
    float bar; 
    bar = foo[1]; 
} 

또는이 사이트 최고에 많은 C++ 질문 같은

솔루션은 표준을 사용하는 것입니다 : 벡터

void myFunc (const std::vector<float> & foo) 
{ 
    float bar; 
    bar = foo[1]; 
} 
1

아니요 표준을 준수하는 방법이 없습니다.

3

C 또는 C++, 아니요.

moonshadow가 암시 하듯이 : 실제 문제는 무엇을 해결하려고합니까?

(당신이 설명을 추가하고 싶은 경우에, 당신의 질문을 수정하는 대신이 답변에 코멘트를 남겨 주시기 바랍니다 -. 더 많은 사람들이 당신의 편집 그런 식으로 볼을)

1

<cstdarg> 헤더를보십시오.

그냥 당신이 인수에 인덱스 액세스 할 수 없습니다 기억,하지만 당신은 루프를 작성하고 원하는 인수에 도달 할 때까지 va_arg를 호출 할 수 있습니다. 인수의 데이터 유형을 파악하면 다음 문제가됩니다.

2

당신은 C 스타일의 변수 인수를 사용할 수 있습니다

#include <stdarg.h> 

void myFunc (int8 foo, ...) 
{ 
    va_list args; 
    va_start(args, foo); 

    float bar = va_arg(args, float); 
    int whatever = va_arg(args, int); 

    va_end(args); 
} 

을하지만이 있음을 의미합니다 : 당신은, 사전에 사용되는 매개 변수 를 호출하기 위해 알아야 할

  1. 기능.
  2. 정적 유형 검사의 이점을 얻지 못합니다. 정말 대신 명시 적으로 명명 된 매개 변수의 동일한 유형의 값의 매개 변수 배열이다 필요한 것 같다 경우
+0

C++에서이 작업을 수행 할 이유는 거의 없습니다. 어쨌든 그렇게하면 함수 매개 변수의 모든 정적 검사를 잃게됩니다. 이제 이것의 가치는 무엇입니까? – sbi

8

boost::tuple은 무엇이 필요합니까?

#include <boost/tuple/tuple.hpp> 

void myFunc (const boost::tuple<int, float, double>& t) 
{ 
    float f; 
    f = boost::get<1>(t); // f now equals bar 
} 

int main() 
{ 
    myFunc(boost::make_tuple(1, 2.0f, 3.0)); 
} 

정적 유형 검사를 제공하며 위치에 따라 요소를 가져올 수 있습니다. 튜플은 미래 표준의 일부입니다. 일부 컴파일러에서는 이미 std::tr1::tuple으로 사용할 수 있습니다. 모든 인수가 동일한 유형의 경우

당신은 std::vector을 사용할 수

#include <vector> 

void myFunc (const std::vector<float>& t) 
{ 
    float f; 
    f = t[1]; // f now equals bar 
} 

int main() 
{ 
    std::vector<float> f_array; 
    f_array.push_back(1.0f); 
    f_array.push_back(2.0f); 
    f_array.push_back(3.0f); 
    myFunc(f_array); 
} 
관련 문제