🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309797

Czy takie cuda są w ogóle możliwe w C++?!?

#309797
From: szykcech
Date: Fri, 04 Jan 2019 20:29
22 lines
3100 bytes
Witam

[Wprowadzenie]
W QPlainTextEdit jest coś takiego jak blok (normalnie 1 linia tekstu). Blok może mieć zmienną dziedziczoną po QTextBlockUserData.
Problem w tym, że chcę użyć biblioteki KSyntaxHighlighting z Kde (teraz robią ze wszystkiego moduły, tak, że można sobie stosować różne części Kde w swoich projektach). Główny argument za tą biblioteką jest wsparcie dla kolorowania ponad 200 rodzajów plików.

[Problem]
KSyntaxHighlighting ma klasę SyntaxHighlighter która korzysta z QTextBlockUserData, jest to klasa TextBlockUserData.
I teraz ja chcę rozszerzyć klasę TextBlockUserData w ten sposób:
class SyntaxHighlighterLineInfo : public TextEditor::EditorLineInfo, KSyntaxHighlighting::TextBlockUserData

Chodzi o to, że TextEditor::EditorLineInfo jest znane mojemu edytorowi, ale całkowicie nie znana jest mu klasa kolorująca składnię (SyntaxHighlighter z Kde).

I teraz chcę rzutować TextEditor::EditorLineInfo na QTextBlockUserData. Ale to nie za bardzo chce działać... Rzutowanie dynamic_cast zgłasza, że TextEditor::EditorLineInfo nie jest polimorficzną klasą (bo nie jest), static_cast zgłasza błąd, że klasy nie są powiązane dziedziczeniem.
reinterpret_cast nie zgłasza błędu ale wywala program przy próbie użycia obiektu jako QTextBlockUserData. Podobnie jak klasyczne rzutowanie w C.

[Motywacje]
Dla mnie bardzo ważne jest by mieć jednoczesne zachowanie mojego TextEditor::EditorLineInfo, KSyntaxHighlighting::TextBlockUserData i QTextBlockUserData. Jednak z zastrzeżeniem, żeby mój edytor (potomek QPlainTextEdit) nic nie wiedział o klasie SyntaxHighlighter z KSyntaxHighlighting.
Dlatego, że chcę mieć program modułowy, gdzie pluginy (m. in. z edytorami i kolorowaniem składni) można wymieniać osobno bez oglądania się na zbędne powiązania.

z góry dzięki i pozdro
Szyk Cech
Technical Details
Message-ID: <2cbd93cf-f0a3-4f6c-bccd-b121ba6d3d7e@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!v55no1898077qtk.0!news-out.google.com!m21ni13978qta.0!nntp.google.com!v55no1898067qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:4850:: with SMTP id v77mr38729537qka.2.1546633750853;        Fri, 04 Jan 2019 12:29:10 -0800 (PST)
X-Received: by 2002:a25:50d2:: with SMTP id e201mr346934ybb.1.1546633750616; Fri, 04 Jan 2019 12:29:10 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!v55no1898077qtk.0!news-out.google.com!m21ni13978qta.0!nntp.google.com!v55no1898067qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Fri, 4 Jan 2019 12:29:10 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=188.146.82.55; posting-account=pyti1AoAAAAf66c003TUy10QAAnMWaKw
NNTP-Posting-Host: 188.146.82.55
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <2cbd93cf-f0a3-4f6c-bccd-b121ba6d3d7e@googlegroups.com>
Subject: Czy takie cuda są w
 ogóle możliwe w C++?!?
From: szykcech@gmail.com
Injection-Date: Fri, 04 Jan 2019 20:29:10 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit