2014-07-22 2 views
6

템플릿 인수를 공백으로 두는 것은 허용됩니다 (<> 사용). 위치 인수를 공백으로 남겨 두거나 동일한 효과를 얻으려면 이것을 다시 작성하는 방법은 무엇입니까?C++ 11 템플릿의 기본 위치 지정 인수

template <int i = 0, int j = 1, int k = 2> 
void blah() { 
    std::cout << i << " " << j << " " << k << std::endl; 
} 

int main() { 
    blah();  // ok 
    blah<>();  // ok 
    blah<1>();  // ok, i = 1 
    blah<1,,3>(); // not ok, i = 1, j = 1 (default), k = 3 
    return 0; 
} 
+0

수 없습니다, 인수 당신이 파이썬에서 할 수처럼 할 다음

는 제안이다 어떤 식별자로도 위치가 식별되지 않습니다. – EdChum

답변

11

이 작업을 수행 할 수 없습니다. 당신은 그것을 통과해야합니다.

auto constexpr default_j = 1; 

template <int i = 0, int j = default_j, int k = 2> 
void blah() { 
    std::cout << i << " " << j << " " << k << std::endl; 
} 

int main() { 
    blah();     // ok 
    blah<>();    // ok 
    blah<1>();    // ok, i = 0 
    blah<1, default_j, 3>(); // ok, explicit and without duplicate magic numbers! 
    return 0; 
} 
7

매크로 재미 (집에서 따라하지 마세요, 어린이) :

#include <iostream> 

template <int i = 0, int j = 1, int k = 2> 
void blah() { 
    std::cout << i << " " << j << " " << k << std::endl; 
} 

#define _blah(D, V) (*#V ? V + 0 : D) 
#define blah_3(I,J,K) blah<_blah(0,I), _blah(1,J), _blah(2,K)>() 
#define blah_2(I,J) blah_3(I,J,) 
#define blah_1(I) blah_3(I,,) 
#define blah__(_1,_2,_3,X,...) blah ## X 
#define blah(...) blah__(__VA_ARGS__,_3,_2,_1)(__VA_ARGS__) 

int main() { 
    blah(); 
    blah(, ,); 
    blah(1); 
    blah(1,,); 
    blah(1, ,3); 
    return 0; 
} 
+3

... 그리고 부모님이 집에 돌아 오면 그들은 두려워했습니다. – bolov

+2

... 그들은 2 주 동안 그를 근거로 삼았습니다. – bolov

+1

무엇 ... whaaaa ... – Quentin