2010-02-05 5 views
11

Çalışma zamanı değerini alan ve bir takım olası değerlerin bir üyesi olup olmadığını belirleyen basit bir şablon işlevi tanımlamak istiyorum.C++: Statik bir diziyi satır içi tanımlamanın bir yolu var mı?

Kullanımı: ben bir statik dizi satır içi nasıl oluşturabileceğini görmüyorum olarak bu, başarısızlığa mahkum olduğunu varsayalım

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; 
} 

: gibi

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

şey.

Ben kullanabilirsiniz:

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

isoneof için küçük bir değişiklikle: ayrıca biraz daha esnek hale getirir

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; 
} 

.

Herhangi bir geliştirme önerisi olan var mı? "statik değerler satır içi satırı" tanımlamak için daha iyi bir yol?

+6

O C zaman meselesi ++ 1x değil mi? Dizi değişmezleri burada geçerli ... – xtofl

+0

@xtofl, yüksek zaman ... –

+0

Dört gözle bekliyorum! ;) – Mordachai

cevap