2010-10-10 26 views
6

bu kod var Diyelim?polimorfik operatörü [] uygulanması

O

int main() 
{ 
    test_t test; 
    int t = test[5]; 
    double f = test[7]; 
    return 0; 
} 

yani gibi görünmelidir bir polimorfik operatör []. Eğer yapmak Sen obj.get<T>(index) için ya da çok benzer bir şey için çare olabilir bir proxy nesne

struct Proxy { 
    template<typename T> 
    operator T() { 
     return static_cast<T*>(data)[index]; 
    } 
    void *data; 
    int index 
}; 

Proxy operator [](int index) 
{ 
    Proxy p = { data, index }; 
    return p; 
} 

dönmek için elinden olduğu Ne

+0

Bu, polimorfizm değildir. – SLaks

+2

@SLaks: Tabii ki bu bir çeşit polimorfizm. –

cevap

7

.

+0

İlginç bir çözüm. +1. – Puppy

+0

Yay, mükemmel. Bu gerçekten işe yarıyor gibi görünüyor, ben proxy için kurucuya başlatıcı stili init yerini ve reinterpret_cast <> kullanılmış ama işe yarıyor! Teşekkür ederim. – berkus

+2

Oops. Orijinal kodda, veriler, bir dizi T olarak kabul edildi. Yukarıdaki ifadede, kullanıcının indeksi, "i", verilerin "i" baytından başlayarak "sizeof (T)" baytını seçer ... –