#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ý
Příspěvky odeslané z IP adresy 95.102.89.–
#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
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 a 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 a 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 a &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 ?