2010-02-05 3 views
11

나는 런타임 값을 취하여 가능한 값 집합의 멤버인지를 결정하는 간단한 템플릿 함수를 정의하고자한다.C++ : 정적 배열을 인라인으로 정의하는 방법이 있습니까?

사용법 : 내가 하나가 정적 배열 인라인을 만드는 방법을 참조하지 않는 한이 실패 할 수밖에되어 있다고 가정

template <typename T, size_t size> 
bool isoneof(T value, T (&arr)[size]) 
{ 
    for (size_t i = 0; i < size; ++i) 
     if (value == arr[i]) 
      return true; 
    return false; 
} 

: 같은

int x; // <- pretend this came from elsewhere... 
if (isoneof(x, {5,3,9,25}) ... 

뭔가.

내가 사용할 수 있습니다

int kPossibilities[] = {5,3,9,25}; 
if (isoneodf(6, kPossibilities)) ... 

을 isoneof 에 약간의 변경으로 : 또한 조금 더 유연하게

template <typename T1, typename T2, size_t size> 
bool isoneof(T1 value, const T2 (&arr)[size]) 
{ 
    for (size_t i = 0; i < size; ++i) 
     if (value == arr[i]) 
      return true; 
    return false; 
} 

합니다.

누구나 개선 할 점이 있습니까? "정적 값 집합 인라인"을 정의하는 더 좋은 방법은입니까?

+6

그것은 C 시간에 관하여를 ++ 1x, 그렇지 않습니까? 배열 리터럴은 거기에 완벽하게 유효합니다 ... – xtofl

+0

@xtofl, 그것의 높은 시간은 ... –

+0

기대! ;) – Mordachai

답변

관련 문제