Názor ke článku Nerozumím... od ondra.novacisko.cz - @5 No to jste jen nepochopil o čem...

  • 22. 11. 2011 22:08

    ondra.novacisko.cz (neregistrovaný)

    @5 No to jste jen nepochopil o čem jsem psal. Ta šablona je tam jen proto, abych nemusel psáte typeid(INeco). Jinak je to celé založené na typeid a dynamic_cast.

    Zdrojáky jsou zde: http://pastebin.com/7FxsNiha

    Můžete je volně použít.

    Stejně jako v jiných jazycích musíte znát minimálně jméno metody a její parametry, než ji zavoláte, i tady ji musíte znát. Jenže v C++ ji musíte nadeklarovat, přesněji schovat do nějakého interface. To není problém, protože obě strany, tedy jak ta strana, co metodu volá, tak ta strana, která metodu implementuje, mohou deklaraci interface naincludovat. Ta strana mezitím jí znát nepotřebuje, a v tom je celé kouzlo.

    V interface nemusíte mít jednu funkci, ale třeba několik, které spolu souvisí. Pak stačí si z objektu interface vytáhnout a zavolat kýženou funkci. To "vytažení" interface je to hlavní, protože tenhle požadavek znamená, že volaný musí někde opatřit implementaci toho interface a to právě přes metodu, která se u mě jmenuje "proxyInterface()", a která se dá předefinovat přesně stejným způsobem, jako metody "doesNotUnder­stand()". Jakmile mám interface vytažený, už komunikuji přímo s tím, kdo metodu umí a není problém ji zavolat.

    Asi nejblíž k tomu má COM+ se svým QueryInterface. Problém je, že Microsoft si sám zůžil prostor pravidly tak, že interface musí být symetrický a reflexivní a transitivní. To znemožňuje proxování interfaců. Nicméně, mají tam ještě jednu metodu a to QueryService a ta funguje podobně bez těhle pravidel. Ale už není tak standardní.