Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Témata - fortran1986

Stran: 1 2 [3] 4 5 ... 8
31
Hardware / Pekné krabičky pre elektroniku
« kdy: 18. 06. 2021, 00:47:11 »
Ahojte neviete o nejakom eshope, v ktorom predávajú pekné štýlové obaly pre elektroniku? Ale fakt by mali byť pekné, aby to nevyzeralo, tak nudne ako niektoré cases pre RPi a Arduino.

Potreboval by som spraviť 10 ks prototypov jedného zariadenia a chcem aby vyzeralo profesionálne.

predstavujem si to nejako takto:

https://xiaomi-store.sk/sk/smart-home/1384-xiaomi-mi-smart-home-hub-6934177710872.html?gclid=Cj0KCQjw5auGBhDEARIsAFyNm9Edstvkn4Spp6mbtBuUahd6_X0taA9S56czNQDlchLuxr9We3VsZtgaAtOqEALw_wcB

Prípadne ďalšia možnosť by bola kúpiť si 3D model a nechať si ho vytlačiť na 3D tlačiarni.

32
Hardware / ESP32 externá anténa
« kdy: 16. 06. 2021, 19:04:41 »
Narazil som na jeden zaujímavý projekt, ktorý by sa dal rozbehnúť aj na ESP32. No bolo by fajn, aby mal access point ESPčka čo najvačší dosah. Mám doma niekoľko ESPčiek v rôznych prevedeniach (okolo 30 kusov) ale ani jeden nemá externú anténnu prípojku... Dala by sa externá anténa pripojiť k nejakému pinu? Prípadne z dosky odstrániť tú malú vstavanú anténu a pripájať tam nejako externú?

33
Vývoj / ESP32 - debugovanie
« kdy: 09. 06. 2021, 22:57:36 »
Ahojte robím na jednej appke pre ESP32, appka sa mi dosť rozrástla, ale teraz som ju prepísal aby podporovala viac rovnakých senzorov naraz. Appka normálne naštartuje ale potom mi tam niečo spadne.

Kód: [Vybrat]
"abort() was called at PC 0x4015c4df on core 1

ELF file SHA256: 0000000000000000

Backtrace: 0x4008d83c:0x3ffd3de0 0x4008dab5:0x3ffd3e00 0x4015c4df:0x3ffd3e20 0x4015c526:0x3ffd3e40 0x4015bbff:0x3ffd3e60 0x4015cb0b:0x3ffd3e80 0x400d2051:0x3ffd4130 0x400d4577:0x3ffd4150 0x400d3577:0x3ffd41d0 0x400dc991:0x3ffd4210 0x400da75d:0x3ffd4250 0x400da825:0x3ffd4290 0x400daa79:0x3ffd42e0 0x4015e0dd:0x3ffd4300 0x4015e159:0x3ffd4340 0x4015e80e:0x3ffd4360 0x4008eaba:0x3ffd4390

Rebooting..."

Myslím že z tejto chybovej "hlášky" mi asi nikto nebude vedieť pomôcť. Preto by som to rád nejako oddebugoval. Na vývoj pre microcontrollery používam IDE PlatformIO ,lenže pre každý microcontroller tam treba rozbehnúť extra debugger. Pozeral som články o debugovaní pre ESP32, ale pri každom riešení pre čo som našiel musím k debugovaniu použiť programátor (ESP32 Prog):

https://www.amazon.de/-/en/ESP-Prog-Development-Programme-Downloader-Compatible/dp/B08MZK7YWP

Už som jeden objednal, ale appku by som rád vydebugoval skôr, ako mi ten programátor príde domov. Neviete či sa ESP nedá debugovať nejako aj bez neho? Alebo ako mám odhaliť príčinu problému? Appka používa vlákna a knižnice tretích strán, takže nájsť miesto kde nastal problém je ako hladať ihlu v kope sena. Možno pokročilejší uživatelia by sa vedeli zorientovať aj podľa toho backtrace? No pre mňa ako BFU sú to len ničnehovoriace čísla.

34
Čína (ako najväčší tažiar BTC) dala bitcoinu červenú. Najprv zakázal Čínskym investičným spoločnostiam obchodovať s BTC a teraz zakázala úplne tažbu crypta. Pred ňou to urobila už aj India. No India neni v ekonomike až taký významný hráč ako Čína. Samozrejme taženie BTC sa môže presunúť hocikam inde. Akurát Čína sa postupne stáva najväčšiu globálnou ekonomikou a má aj veľmocenské a vojenské ambície. Už teraz ekonomicky kolonizuje Afriku. Je to čo do počtu obyvateľov najväčšia krajina sveta. A hneď za ňou nasleduje India, ktorá sa už počtom obyvateľov doťahuje na Čínu. Obidve krajiny sú voči cryptu nepriateľské... Už za pár rokov bude Čína svetová veľmoc ktorá predbehne USA. A potom bude mať vplyv na celosvetové dianie. Čo ak zakážu cryptobiznys na úrovni OSN? Tak ako v minulosti počas Pax Americana zakázali na úrovni OSN napríklad marihuanu? Rozbehnú nejakú nenávistnú kampaň proti cryptu a potom pojde celý svet po crypte ako dnes po pedofiloch alebo narkobarónoch?
Pre centrálne banky sú kryptomeny konkurenciou a nepochybujem o tom, že aj tu na západe je BTC tŕňom v oku väčšiny centrálnych bankérov a vlád. A čím viac trh s cryptom rastie tým je pre vlády nebezpečnejší. Ono totiž cez kryptomeny vás nemôže nikto skryto "zdaňovať" pumpovaním nových peňazí do ekonomiky. Vláda cez crypto nemá na bežných ľudí páku a nemôže ich oberať o hodnotu peňazí a vytvárať tak ilúziu ekonomického rastu...
Preto bolo mimochodom v USA zakázané držať zlato (už je to naštastie povolené). A kryptomeny sú niečo ako digitálne zlato. Po vyťažení všetkých blokov ho bude konečné množstvo, takže jeho cena by mala postupne so zväčšovaním crypto trhu narastať (tak ako narastala cena peňazí počas zlatého štandardu). Pre CB by boli súkromné peniaze veľmi nebezpečná vec. Je to vlastne moderná digitálna implementácia Hayekovho free bankingu - teda súkromné peniaze nad ktorými nemajú štáty žiadnu kontrolu. A toho sa väčšina vlád bojí ako čert kríža.

1. Ako teda vidíte budúcnosť crypta oplatí sa doňho ďalej investovať? Oplatí sa šetriť si v crypte na budúcnosť?
2. Alebo je na čase nakúpiť si radšej investičné zlato? Držať hodnotu vo fiate po skončení covid krízy by bol hazard.

35
Vývoj / Zavlažovací systém rastlín
« kdy: 11. 05. 2021, 01:10:11 »
Ahojte, chcem si vytvoriť zavlažovací systém, na moje rastlinky, ovládaný cez wifi. je tam senzor na vlhkosti, ktorý je v kochlíku a k tomu akváriová pumpička na 3 - 4.5V, ktorá má pumpovať vodu do kochlíka z nejakej vačšej nádržky s vodou. Keď je pôda príliš suchá a procesor ESP32 má vyslať signál do relé, aby zaplo obvod s pumpičkou. na ESP32, bude bežať webserver kde si budem vedieť pozrieť na dialku cez wifi vlhkosť pôdy, intenzitu svetla a tiež budem vedieť zapnúť pumpičku (a neskôr lampu) na dialku aj manuálne. Možno tam pripojím aj kamerku aby som sa mohol pozrieť ako aktuálne vyzerá tá rastlina a neskôr pridám aj nejakú lampu, ktorá sa bude zapínať podľa aktuálneho času (prípadne aj manuálne na dialku cez webový prehliadač) čas sa bude získavať cez internet. Momentálne, kedže nemám skúsenosti so zapojením relé, som si koli testu spravil len takýto jednoduchý testovací skript, ktorý by mal relé zapínať vypínať každú sekundu:

Pripojil som tam toto relé, cez ktoré budem neskôr spínať viacero obvodov:

http://wiki.sunfounder.cc/images/c/c2/6_zpsilyctpb7.jpg

http://wiki.sunfounder.cc/index.php?title=4_Channel_5V_Relay_Module

Kód: [Vybrat]
#include <Arduino.h>
const int PumpSwitcherPin = 5;

void setup()
{
    Serial.begin(115200);
}

bool isEnabledPump = false;

void loop()
{
    isEnabledPump  = !isEnabledPump;
    digitalWrite(PumpSwitcherPin, isEnabledPump ? HIGH : LOW);
    Serial.println(isEnabledPump  ? "PUMP ON" : "PUMP OFF");
    delay(1000);
}

Pumpa funguje, napájam ju z troch tužkových bateriek (cca 4.5V), keď som ju pripojil priamo na baterku tak pumpovala, neskôr baterku vymením za adaptér.

Problém je, ale so zapojením relé, niekde evidentne robím chybu. GDN som pripojil na pin GDN, VCC som pripojil na 5V pin (VIN) a IN1 na D5 pin (v skripte PumpSwitcherPin). Spínací obvod som na druhej strane relé zapojil medzi baterku a pumpu.

Druhú stranu relé som pripojil podľa tohoto plániku:



https://components101.com/asset/sites/default/files/component_pin/Four-Channel-Relay-Module-Pinout.jpg

Teda jednu časť som pripojil na COM (Relay 1 Common) a druhú časť na NO (Relay1 normally open). Malo by to fungovať ale nefunguje. Neviete v čom môže byť problém? Žiadnu schému určenú priamo pre tento typ relé a esp32 som nenašiel, vychádzal som zo schém zapojenia pre ESP8266 a Arduino ale myslím že zapojenie relé by malo byť na 99% v poriadku. Tak kde môže byť problém?

Tu sú ešte foto zapojenia:

http://pluton.cloud/attachment/e6c8895e-6ace-4f45-a4f6-239d83d76a8c/20210511-010117.jpg
http://pluton.cloud/attachment/0c421857-5f76-4d21-99a0-d27a7e9502e4/20210511-010129.jpg

36
Hardware / Cena laptopu i7 Lenovo IdeaPad 510-15IKB Gun
« kdy: 06. 05. 2021, 17:10:26 »
Ahojte. Rozmýšlam či predať Lenovo i7 s 16GB Ram a SSDčkom, 4GB NVIDIA Grafikou GeForce 940MX a IPS displejom a ozvučenie je od HARMAN/KARDON

Model je: Lenovo IdeaPad 510-15IKB Gun Metal (ale má trošku lepšiu konfiguráciu ako je tá štandartná katalógová)

Má síce niekoľko rokov, ale case aj klávesnicu som vymenil za novú a odvtedy sa nepoužíva, takže vyzerá ako nový. Je to celkom rýchly HW, ale keďže ja som v práci dostal laptop a ešte mám desktop, tak tento laptop leží na poličke, tak by bolo fajn keby sa preň našlo nejaké využitie, alebo dalo speňažiť. Koľko orientačne by som zaň mohol pýtať?

PS Neviem do akej kategórie to mám pridať, či hardware, či inzercia, keďže zatiaľ sa pýtam len na cenu, neviem či to má vôbec zmysel predať, lebo ak by to bolo moc lacné, tak to radšej darujem sestre, nejde ešte o inzerát (ešte nič nepredávam)

37
Vývoj / Vyhľadávanie položiek v std::map pre Arduino
« kdy: 01. 05. 2021, 20:05:41 »
Ahojte používam C++  na vývoj desktopových aplikácií pre linux / windows, no nakoľko som sa C++ začal učiť len minulý a tento rok (nevenoval som sa mu stále, ale s odstupmi niekoľkých mesiacov), prišiel som do kontaktu s jeho najnovšou verziou C++ 20, no teraz som prešiel aj na platformu arduino resp. esp32. Aby bolo jasné, keď píšem o arduine, mám na mysli SW platformu arduino pre ESP32 (nie HW platformu arduino)

ESP32 ma veľmi baví, žiaľ STL pre Arduino je mierne orezané (čo je pochopiteľné keže ESP32 má málo pamate a nemôže si dovoliť ňou mrhať na zbytočné metódy), takže tam chýbajú metódy, na ktoré som zvyknutý z najnovšieho STL pre C++ 20. Momentálne si robím pokusný projekt, ktorý robím len preto, aby som sa tú platformu naučil. Maličká meteostanica, ktorá by mala obsahovať rôzne senzory, bude napríklad merať aktuálnu teplotu a vlhkosť a postupne pridám ďalšie senzory... možno rýchlosť vetra vlhkoasť pôdy na dvore atď... na ESP beží asynchrónny webserver, na ktorý sa pripájam z hociakého zariadenia cez wifi. Mno a ten webserver obsahuje HTML šablóny. HTML šablóny sú uložené v súborovom systéme ESP32ky: SPIFFSFS no a keď urobím request na nejakú adresu, tak chcem aby sa šablóna loadla zo súboru len 1x a aby ostala uložená v RAMke. To znamená že si robím cahce. A na cache som chcel použiť STL kontainer std::map, problém je, že narozdiel od toho Windows / Linux std::map, std::map pre arduino neobsahuje metódu std::map::contains ani metódu [b4]std::map::find[/b]. stl síce obsahuje všeobecnú metódu std::find, kde sa vložia iterátory no obávam sa či je rovnako rýchla ako tá std::map::find. takže otázka je:

1. Aký je najvhodnejší spôsob, ako sa pri std::map (po starom) zistiť či std::map obsahuje položku? bez toho aby som použil exceptiony a metódy std::map::contains a [b4]std::map::find[/b], ktoré na platforme arduino nie sú k dispozícii?

2. je std::find vhodný na zisťovanie existencie položky pre kontainer std::map? neni std::find pomalší a nevyhľadáva položky, tak ako keby išlo o pole párov (std::pair)? Lebo vyhľadávanie v poli je niekoľkonásobne pomalšie, ako keď mám položky indexované cez kľúče nie?

38
Hardware / Statická elektrina a elektronika
« kdy: 06. 04. 2021, 23:42:29 »
Začal som sa venovať hrátkam s elektronikou. Nakúpil som si kopu súčiastok, komponent, shieldov, microcontrollerov, processorov atď. Kúpil som si na to taký organizér zložený s malých plastových šuflíkov. Mno, ale vačšina tých komponent mi chodí zabalených v sáčkoch, ktoré tlmia elektrický výboj.

Rád by som tie súčaistky vybalil a vložil do šuflíka "len tak" nezabalené, ale mám strach či ich náhodoou nepoškodím. Aká je pravdepodobnosť, že statická elektrina niečo zničí? Celé detstvo som sa venoval pokusom s elektronikou.

Používal som rôzne čipy a tranzistory FET MOSFET riadené elektrickým poľom a nikdy sa mi nič nezničilo (zničilo ale nie statickou elektrinou), taktiež s počítačovými komponentami som X krát manipuloval, nikdy som nebol uzemnený a nikdy som nič nepoškodil. Takže mne príde, že toto je trošku prehnaná opatrnosť. Alebo ako tie súčiastky uskladniť a ako s nimi manipulovať?

Naozaj sa človek musí uzemniť keď chce manipulovať s elektronikou? keby som na tie šuflíčky z vnútra naniesol nejaký elektrovodivý lak, antistatický sprej, alebo kovovú fóliu nestačilo by to?

39
Vývoj / Arduino inšpirácia
« kdy: 11. 03. 2021, 20:42:46 »
Keďže tu máme kovídek a s ním aj veľa volného času, rozhodol som sa, že sa niečo nové naučím. Práve sa zoznamujem s arduinom a som ním veľmi príjemne prekvapený. Neskôr plánujem vyskúšať aj iné microcontrollery ako: BBC Micro Bit alebo Raspberry Pi Pico

Kúpil som si k arduinu niekoľko stavebníc a starter packov. Mám rôzne a súčiastky od výmyslu sveta, senzory, displeje ledky, wifi modul mikrofóny vysielače prijímače atď. A skúšam si príklady čo boli na CD aby som vedel, čo všetko sa s tým dá vlastne robiť.

Rád by som si ale naprogramoval nejakú reálnu aplikáciu s využitím microcontrollera (a C++). Nemáte náhdou nejaké nápady? Alebo načo ste vy využili arduino?

Ja mám zatiaľ len jeden nápad:

Urobiť si hardwarovú crypto peňaženku s malým dotykovým displejopm. A podporou viacerých kryptomien.

PS ospravedlňujem sa za horšiu gramatiku, spal som len 2 hodiny

40
Vývoj / C++ downcast this v předkovi na potomka
« kdy: 14. 02. 2021, 15:32:43 »
Ahojte akým spôsobom získam inštanciu potomka v predkovi? Reálny príklad by mal logovať exceptiony ale to sem nebudem dávať. Urobil som zjednodušený príklad toho čo potrebujem:

Kód: [Vybrat]
class Base
{
public:
Base()
{
std::cout << "type: " << typeName(); // tu chcem mat logovanie typu
}

virtual std::string typeName() const
{
return typeid(*this).name();
}
};

class Child : public Base
{
public:
using Base::Base;
};

auto child1 = Child(); // vypise sa "type: class Base"
auto child2 = std::make_shared<Child>(); // vypise sa "type: "type: class Base"

a ja potrebujem vypisat pre typ Child "type: class Child". Alebo teda kludne moze byt názov typu aj s pointerom.  Chápem že this v predkovi je upacstnué na predka. Dalo by sa to downcastnúť na Child... ale tam už potrebujem názov typu na, ktorý to downcastnem:

Kód: [Vybrat]
template<typename ChildType>
class Base
{
public:
Base()
{
std::cout << "type: " << typeName(); // tu chcem mat logovanie typu
}
virtual ~Base() = default;

virtual std::string typeName() const
{
const auto derived = dynamic_cast<ChildType *>(const_cast<Base *>(this));
return typeid(derived).name();
}
};

class Child : public Base<Child>
{
public:
using Base::Base;
};
auto child1 = Child(); // vypise sa "type: class Child * __ptr64"
auto child2 = std::make_shared<Child>(); // vypise sa "type: class Child * __ptr64"

Nedalo by sa to nejako downcastnúť aj bez toho aby som musel názov typu predať ako template parameter? Nejako použiť type inference alebo tak?

41
Vývoj / Typescript a Autocomplete
« kdy: 11. 02. 2021, 15:26:00 »
Dobrý deň...

dajme tomu že si vytvorím typový alias:

Kód: [Vybrat]
type Foo = { prop1: string, prop2: string };

A potom mám funkciu:

Kód: [Vybrat]
export function bar(value: Baz): Foo;

ale autocomplete mi zobrazuje ako návratovú hodnotu, názov typového aliasu teda Foo čo je fajn, ale ja by som chcel aby mi autocomplete v niektorých prípadoch miesto toho zobrazil celý literal, teda niečo takéto:

Kód: [Vybrat]
bar(value: Baz): { prop1: string, prop2: string };

Neviete mi poradiť ako na to? Existuje na to nejaké kľúčové slovo, ktoré by VScodu povedalo že tam nechcem zobraziť názov typu, ale typ samotný? Nechem tam použiť inline zápis.

42
Hardware / NVIDIA Jetson Nano
« kdy: 28. 01. 2021, 00:48:34 »
Kúpil som si NVIDIA jetson nano a keďže z iných arm dosiek viem že bootovanie z MicroSD karty je pomalé kúpil som si k nemu aj 250GB SSD a taký ten šuflík aby som to mohol pripojiť cez USB.

Nahodil som si systém na SSD a pre skúšku aj na MicroSD.

Z Micro SD karty to pohode bootuje ale z SSD cez USB vôbec, viete poradiť ako to spojazdniť z SSD? Chcel som sa s tou jetson mašinkou hrať a aj niečo na to naprogramovať ale robiť tieto veci na pomalej MicroSD karte sa mi nechce Micro SD má len 100 MB za sekundu nehovoriac o tom že Micro SD karty toho moc veľa nevydržia a časom môže prísť človek o dáta.

Ale prečo to nejde z toho USB? mám podozrenie že problém je v USB napájaní (aspoň podľa toho čo som teraz rýchlo pogooglil). Okrem toho keď pripojím ten SSD k PC tak na ňom svieti modrá ledka keď ho pripojím k Jetson Nano tak nič nesvieti.

žiaľ mám tu k dispozícii zatiaľ len UK Raspberry PI adaptér pre RPI3 ktorý mám pripojený do siete cez EU reduckiu. Má 2A. Kúpil som si aj dva ďalšie adaptéry ale kupoval som ich v UK takže chvíľu potrvá kým mi ich dovezú. Myslíte že ten 4A vyrieši môj problém? Alebo viete nejaký iný spôsob ako ten SSD rozhchodiť? Ďakujem.

43
Mám funkciu filesystem::directory_iterator ktorá vracia všetky filesystem entries vrátane files, directories, symlinky a rôzne zariadenia etc.

a ja by som si chcel spraviť 2 helper funkcie:

jedna sa bude volať directory::contained_files vracajúca len súbory vo folderi a druhá directory::contained_directories  vracajúca len foldre.

Ale chcem aby to vracalo zase iterátor (nie kontainer ale iterátor)

viem že v directory_entry má funkcie ktoré vrátia boolean pri is_directory alebo is_regular_file ale ako vrátiť znovu iterátor? V iných jazykoch by som tam hodil cyklus a pri generátoroch a urobil yield alebo použil Seq.filter či LINQ where Ale C++ má korutiny až od verize 20 a tá ešte neni hotová. V mojej preview verzii C++ 20 zatiaľ neni ani typ generator<item_name> ani co_yield takže ako to by som to mal riešiť bez korutín?

44
Robím si triedu, ktorá by mala zvládať všetky bežné úkony a konverzie dátumu a času. Pôvodne som si jednu triedu napísal, ale postavil som ju nad štruktúrou tm, ktorú som prasiacky podedil do public časti (urobil som to koli možnosti implicitnej konverzie) a rozšíril ju o helper metódy.

Dedenie premenných, tak aby boli prístupné z vonku nepovažujem za čisté riešenie (imho premenné do public časti nepatria (ak nejde o options objekt), lebo sa tým porušuje zapúzdrenie... takže som dedičnosť chcel nahradiť kompozíciou. A z tm urobiť private member.

narazil som, ale aj na vážnejší technický problém. štruktúra tm má najmenšiu jednotku sekunda. Takže ak DateTime postavím na tm s menším intervalom ako sekunda si neporadí. Rozhodol som s teda, že to celé prepíšem a postavím to nad:

std::chrono::system_clock::time_point a std::chrono::system_clock

ten  si pordí fakt s maličkými intervalmi, akurát nevidím spôsob ako čas naformátovať na string (okrem manuálnej konverzie). C++ 20 by malo obsahovať std::chrono::format akurát moja preview draft verzia C++ 20 std::chrono::format zatiaľ neobsahuje. Ako teda std::chrono::system_clock::time_point prekonvertovať na string ak nemám k dispozícii std::chrono::format? Vygooglil som si nejaké príklady ktoré ale používajú konverziu na tm tomu sa práve chcem vyhnúť. Lebo potom vlastne tým std::chrono::system_clock::time_point nič nezískam . Takže prosím o radu akým spôsobom naformátovať  std::chrono::system_clock::time_point (alebo v horšom prípade aspoň time_t) na string (alebo const char*)? Ale aby sa dala používať presnosť na milisekundy prípadne ešte menej?

45
Vývoj / Upcasting potomka na abstrakciu
« kdy: 15. 12. 2020, 01:04:48 »
Dobrý deň, ako správne upcastnúť potomka na predka? Skúšal som rôzne spôsoby, ale pri väčšine som dostal chybu: Error: 'IClipboardReader': cannot instantiate abstract class. Prvý (z ľava do prava) a posledný spôsob (pointer) mi funguje. Viete mi prosím vysvetliť prečo ostatné nie? A ako sa to, upcastuje správne (ale z prava do ľava)?

Kód: [Vybrat]
using binaries = std::vector<char>;

class IClipboardReader
{
public:
virtual binaries Read() const = 0;
};

class IClipboardWriter
{
public:
virtual void Write(binaries bins) = 0;
};

class ClipboardSlot : public IClipboardReader, IClipboardWriter
{
public:
binaries Read() const override
{
// ...
return { 'a', 'b', 'c' };
}

void Write(binaries data) override
{
// ...
}
};

template<typename CharType = char>
std::basic_ostream<CharType>& operator<<( // vypisanie vectoru
std::basic_ostream<CharType>& out,
const std::vector<CharType>& value
)
{
for (auto& c : value) out << c; return out;
}

void main()
{
auto slot = ClipboardSlot();
IClipboardReader& upcasted1 = slot; // OK
auto upcasted2 = (IClipboardReader&)slot; // Error: 'IClipboardReader': cannot instantiate abstract class
auto upcasted3 = std::forward<const IClipboardReader&>(slot); // Error: 'IClipboardReader': cannot instantiate abstract class
auto upcasted4 = static_cast<const IClipboardReader&>(slot); // Error: 'IClipboardReader': cannot instantiate abstract class

auto slotPtr = std::make_shared<ClipboardSlot>();
auto upcasted5 = static_cast<std::shared_ptr<IClipboardReader>>(slotPtr); // OK

std::cout << "upcasted1:" << upcasted1.Read() << std::endl;
std::cout << "upcasted2:" << upcasted2.Read() << std::endl;
std::cout << "upcasted3:" << upcasted3.Read() << std::endl;
std::cout << "upcasted4:" << upcasted4.Read() << std::endl;
std::cout << "upcasted5:" << upcasted5->Read() << std::endl;
}

Stran: 1 2 [3] 4 5 ... 8