Anonymní profil Ondrej – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Ondrej – Programujte.comAnonymní profil Ondrej – Programujte.com

 

Příspěvky odeslané z IP adresy 95.102.89.–

Ondrej
C / C++ › Ukazateľ na funkciu, ktorá p…
10. 3. 2021   #387636

#2 Ondrej
A taktiež netuším prečo som vo funkcii GetMOT pri switchi po vrátení hodnoty uvádzal break. Je tam zbytočný

Ondrej
C / C++ › Ukazateľ na funkciu, ktorá p…
10. 3. 2021   #387634

#1 Ondrej
Podarilo sa mi to vyriešiť.. v ten moment ma nenapadlo, že môžem funkcie zadeklarovať aby preberali referenciu na triedu z ktorej sa dedí a následne pri predávaní parametrov tejto funkcie iba explicitne zmením dátový typ inštancie odvodenej triedy.

Zmenil som deklaráciu pre funkcie nasledovne 

static bool BoxOverlapTest(const ColliderMesh::Mesh& rect1, const ColliderMesh::Mesh& rect2);
static bool CircleOverlapTest(const ColliderMesh::Mesh& circ1, const ColliderMesh::Mesh& circ2);

a pri volaní týchto funkcií, som im explicitne zmenil dátový typ

auto MOTFunction = Collider::GetMOT(col1MT);
... my code ...
MOTFunction((ColliderMesh::Mesh)col1.m_Mesh[i], (ColliderMesh::Mesh)col2.m_Mesh[j]); // explicitly casting them

niekedy je lepšie si dať pauzu.. v tej chvíli ma to naozaj nenapadlo

Ondrej
C / C++ › Ukazateľ na funkciu, ktorá p…
10. 3. 2021   #387632

Ahoj, snažím sa vytvoriť ukazateľ na funkciu, ktorá preberá ako parametre dve referencie na odvodenú triedu. Kedže sa jedná o odvodenú triedu, vytvorím si teda ukazateľ na funkciu ktorej dátové typy parametrov budú referencie na základnú triedu z ktorej bolo dedené.  

Napríklad mám vytvorený dátový typ predstavujúci ukazateľ na funkciu  

typedef bool(*MOT_fptr)(const ColliderMesh::Mesh&, const ColliderMesh::Mesh&)

potom tu mám funkciu, ktorá vracia ukazateľ na funkciu na základe zvoleného typu 

MOT_fptr GetMOT(ColliderMesh::Type type)
{
    switch (type) 
    {
        case ColliderMesh::Type::Rectangle: 
            return &Collider::BoxOverlapTest; // error: return value type does not match the function type
            break;

        case ColliderMesh::Type::Circle:  
            return &Collider::CircleOverlapTest; // error: return value type does not match the function type
            break;

        default: return UNDEF_PTR; 
            break;
    }
}

kde funkcie BoxOverlapTest CircleOverlapTest sú zadeklarované ako

static bool BoxOverlapTest(const ColliderMesh::Rectangle& rect1, const ColliderMesh::Rectangle& rect2);
static bool CircleOverlapTest(const ColliderMesh::Circle& circ1, const ColliderMesh::Circle& circ2);

Obidve triedy ColliderMesh::Rectangle ColliderMesh::Circle sú odvodené zo základnej(rodičovskej) triedy ColliderMesh::Mesh.Avšak pokiaľ sa snažím vrátiť z funkcie GetMOT referenciu na funkciu &Collider::BoxOverlapTest &Collider::Circledostávam chybu return value type does not match the function type.

Otázka teda znie.. je vôbec niečo takéto možné a iba mi niečo uniká, alebo mal by som hľadať iné riešenie ?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý