Generická struktura   otázka

C#, .NET

Zdravím,

aktuálně řeším problém s generickou strukturou která reprezentuje čtyř-rozměrný vektor.

        struct Vector4D<T> 
        {
            public T v1;
            public T v2;
            public T v3;
            public T v4;
            
            //...

            //nasobeni vektoru cislem
            public static Vector4D<T> operator *(Vector4D<T> a, T b)
            {
                a.v1 *= b;
                a.v2 *= b;
                a.v3 *= b;
                a.v4 *= b;
                return a;
            }
        }

Problém spočívá v tom že struktura nedává smysl pokud není T číselný datový typ(Int32, Double, Single, Int64,...). Proto bych se chtěl zeptat, jestli tu není nějáký způsob, jakým mohu omezit T aby nenabývalo datového typu mimo číselných datových typů.

Vím že se této funkčnosti dálo dosáhnout pomocí klíčového slova where ale už si nepamatuju jak. Dále mě napadlo použít statický konstruktor ale to by neřešilo to, že na T nemohu použít operátor * a tak dále.

Děkuji za každou radu.

Honza.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Keby ste si spravili zvlášť štruktúru pre Vector4D<int>, Vector4D<float>, Vector2D<double>, apd. ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Moc vás nechápu. Navrhujete řešení, implementovat pro všech 11 číselných typů vlastní strukturu? To potom ve výsledku bude 11 stejných struktur které se budou lišit jen datovým typem složek vektoru(v1, v2, v3, v4) operátorů a metod.

Datový typ T lze ovlivnit. Klíčové slovo je tuším where ale nejsem si jistý v jakém musí být kontextu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ako ste napísali nižšie, typ T sa nedá obmedziť len na číselné dátové typy. Takže nevidím inú možnosť. Zvážte však, ktoré číselné typy potrebujete, a ktoré nie.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak bohužel jsem se dozvěděl z http://msdn.microsoft.com/en-us/library/... že není možne omezit datový typ jen na číselné datové typy.

Děkuji vešm za vaše rady.

Honza

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback