내가 가진 가정함수가 인수 목록의 순열을 수락하는 표준 방법은 무엇입니까?
class A,B,C;
const A a_def;
const B b_def;
const C c_def;
void f(A a=a_def, B b=b_def, C c=c_def);
이 내가 기본 매개 변수를 사용하려면, 나만 그냥 c
, 또는 b
및 c
또는 이들의 세 가지를 모두 생략하거나 할 수 있다면,하지 -하지만 단지 a
또는 b
혼자. 그러나 인수 유형을 혼합 할 수 없으므로 f(A(), C())
(사실 f(B(), C(), A())
: 인수의 순서는 임의이며 실제로는 의미가 없습니다)를 호출하는 것은 완전히 불가능합니다.
void f(A a, C c, B b=b_def) { f(a,b,c); }
void f(B b, A a=a_def, C c=c_def) { f(a,b,c); }
void f(B b, C c, A a=a_def) { f(a,b,c); }
void f(C c, A a=a_def, B b=b_def) { f(a,b,c); }
void f(C c, B b, A a=a_def) { f(a,b,c); }
(4 과부하하는 경향이 ! = 24 순열) 및 5 개 매개 변수 (5! = 120 순열)의 범위를 벗어났습니다.
가변 인수 목록이나 어떤 종류의 템플릿 메타 프로그래밍을 통해 모든 오버로드를 실제로 수행하지 않고도이 기능을 자동으로 수행 할 수있는 방법이 있습니까?
왜이 작업을 수행 하시겠습니까? 그것은 나쁜 생각처럼 보입니다. 그러나 명명 된 인수를 허용하는 Boost.Parameters 라이브러리 (http://www.boost.org/doc/libs/1_37_0/libs/parameter/doc/html/index.html)가 있습니다. –
혜택이 보이지 않습니다. 사용자가'f (a_def, some_b, some_c); '라고 타이프하는 것이 잘못된 이유는 무엇입니까? – GManNickG
@Travis "왜 이것을하고 싶습니까?"주로 하나의 단일 인수 (항상 같은 것은 아님)에 기본 매개 변수를 사용하고 싶지만, 어떤 순서로든 특정 함수 호출에서 가장 명확하게 보일 것입니다. – leftaroundabout