- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Milyen cserélhető objektíves gépet?
- ZIDOO médialejátszók
- Azonnali informatikai kérdések órája
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Autós kamerák
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Gaming notebook topik
- Milyen videókártyát?
Hirdetés
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
ph A Kereskedelmi Minisztérium egyelőre csak felméri a helyzetet, egyelőre nem látni, hogy tudnak-e bármit is tenni.
-
Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
it Egyre nagyobb probléma az AI hallucinálása – most az osztrák adatvédelmi hatóság veheti elő a ChatGPT miatt az OpenAI-t, alapvetően a GDPR megsértése miatt.
Új hozzászólás Aktív témák
-
opr
veterán
válasz daninet #4343 üzenetére
Amit a tobbiek irtak, plusz annyit tennek hozza, hogy sprintf helyett en std::string+std::regex+std::regex_replace-el operalnek.
Picit lassabb, az teny, cserebe sokkal atlathatobb, olvashatobb, konnyebb modositani es megerteni, es ebben a kodban ugyse ez lesz a sok ido/szuk keresztmetszet, azt a +1ms-et, ami a nativ char helyett string operation lesz siman bealdoznam a szebb es erthetobb kod erdekeben.szerk: Most csak fejbol idegepeltem, nem vagyok benne 100% biztos, hogy ez igy fordul, de a lenyeg stimmelni fog:
#include <regex>std::string daFox =R("The quick REPLACE_ME_SENSEI fox...");
daFox = std::regex_replace(daFox, std::regex("REPLACE_ME_SENSEI"), "brown");[ Szerkesztve ]
"Programozó vagyok. Ez azt jelenti, hogy amit leírok, megtörténik." :D “The only valid measurement of code quality is What-The-F**ks/Minute.” - Robert Martin
-
daninet
veterán
válasz jattila48 #4353 üzenetére
igen
dabadab: igenmindenkinek köszi, működik.
Egyébként ha valaki érdekel egy ilyen homokba rajzasztal playlistjét indítja majd a kód, a 9 fájl darabja 30-60perc egymás után rajzolódik a homokba.Miért vegyem meg, ha 3x annyiért, 3x annyi idő alatt megépíthetem? ´¯`·.¸¸.·´¯`·.¸><(((º>
-
weiss
addikt
Van arra mód, hogy egy usingolt típusnévhez tagfüggvényt adjak? Tehát van egy ilyen:
using kiskutyak = std::unordered_map<string, kiskutya>;
kiskutyak k;Ide szeretnék egy olyat, hogy
k.print();
I did nothing, the pavement was his enemy!
-
DrojDtroll
addikt
Sziasztok!
Van egy template-es megoldásom.
template<typname a, typename b, typenamec c>
void creatC(b _b)
{
//itt végül elkészül a c típusú objektum amire szükségem van és eltevődik a megfelelő helyre
}
a programban a következő módon van most használva az alábbi rész:
createC<x, y, z1>(_y);
createC<x, y, z2>(_y);
createC<x, y, z3>(_y);
createC<x, y, z4>(_y);
createC<x, y, z5>(_y);
....
z1-z5 mind más típusok amiből példányt szeretnék gyártani. Szeretném ezt egyszerűbbé tenni.
Az elképzelésem:
createC<x, y, z1, z2, z3, z4, z5>(_y);
typename... c -vel kellene próbálkozni, de ahogy látom azt a ()-jelek között tudnám használni a <> jelek között nem.
Megoldható valahogyan amit szeretnék? -
doc
nagyúr
válasz DrojDtroll #4357 üzenetére
nem biztos hogy jol ertem mire gondolsz, de nem a "variadic template" kell neked?
-
dabadab
titán
válasz DrojDtroll #4357 üzenetére
Nem teljesen értem, hogy mit akarsz (pl. hogy miért van ott az x típus), de nekem kifejezetten gyanús, hogy azért nem akar összeállni neked ez a megoldás, mert meg akarod erőszakolni a nyelvet és valójában azt kellene csinálnod, hogy átgondold, hogy igazából mit akarsz és azt megoldani.
Szóval: igazából mit akarsz csinálni?
DRM is theft
-
DrojDtroll
addikt
válasz dabadab #4359 üzenetére
Az a lényeg, hogy van 5-6 komponensem amit be kell regisztrálni egy DI frameworkbe. Ezeknek a komponenseknek a legyártására és beregisztrálására akarok egy template függvényt csinálni. Eddig n-szer le volt másolva ugyan az a kód egy kis változtatással(c). Igazából most az a-b paraméterek el is felejthetjük.
Összegezve azt akarom, hogy az adott típusokból egy templatefüggvény gyártson példányokat. createclient<clienta, clientb, clientc>(); -
DrojDtroll
addikt
válasz DrojDtroll #4360 üzenetére
Meglett a megoldás.
c++ - variadic function template without formal parameters - Stack Overflow
Another way is turning the non-template function
f
into a variadic template function which accepts zero or more template arguments (the otherf
requires one or more template arguments). Then to avoid ambiguity, SFINAE away this template function when the number of arguments is not zero. Well, a code is better than 1000 words:#include <type_traits>
template <typename... Ts>
typename std::enable_if<sizeof...(Ts) == 0>::type f() { }
template <typename T, typename... Ts>
void f()
{
// do something with
T
f<Ts...>();
}
[ Szerkesztve ]
-
DrojDtroll
addikt
Sziasztok!
Van egy beágyazott linux amiről meglehetősen keveset tudok. Root/sudo jogom nincs rajta. Egy erre fejlesztett alkalmazást kellene debug-olnom. gdb nincs a rendszeren. Szeretnék buildeni egy binárist a gdb-ből, de nem sikerül. Maga a build elkészül, de amikor futtatnám not found üzenetet kapok. Azt már világos, hogy a dinamikusan linkelt libek miatt van ez, de --static beállítással sem jutok előrébb, ugyan azt látom -> not found. Hogyan tudnám kideríteni, hogy pontosan mire volna az adott rendszeren szüksége a binárisnak és azt hogyan tudom bejátszani a configure-nak paraméterként?
(Egy lehetséges megoldás lenne gdbservert használni, amiből sikerült is megfelelő binárist előállítanom, de nem tudok hozzácsatlakozni, mert a portok le vannak tiltva, amihez szintén nincs erőforrásom)
A kérdés feltettem a linux haladó topikban is. -
sztanozs
veterán
válasz DrojDtroll #4362 üzenetére
Próbálj meg belőni egy SSH Port Forwardingot a gdb szerver portjáta. SSH csak nyitva van...
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
weiss
addikt
Valszeg láma kérdés, de nem értem. Ez nem megy:
#include <iostream>
class A
{
private:
std::string m_s;
public:
A( std::string s )
{
m_s = s;
}
std::string get()
{
return m_s;
}
};
class B
{
private:
A m_a( "asdf" );
public:
std::string get()
{
return m_a.get();
}
};
int main()
{
B b;
std::cout << b.get();
return 0;
}De ez igen:
#include <iostream>
class A
{
private:
std::string m_s;
public:
A( std::string s )
{
m_s = s;
}
std::string get()
{
return m_s;
}
};
int main()
{
A m_a( "asdf" );
std::cout << m_a.get();
return 0;
}A lényeg, hogy egyszer jó a
A m_a( "asdf" );
másszor meg nem.I did nothing, the pavement was his enemy!
-
Scale
őstag
Tudomásom szerint így ahogy a B-ben értéket adsz az m_a-nak úgy nem lehet, B-nek kell egy konstruktort megadnod ahol az m_a-t így inicializalod ahogy tetted a változó definicional, úgy elvileg menni fog ugyanez.
Bár most nem próbáltam ki, mobilról nézve ezt látom problémának, esetleg a hiba bemásolása is segíthet amit kapsz. ( Fordítás vagy futás idejű hiba, stb?) -
weiss
addikt
Fordítási hiba.
Clang:
<source>:23:12: error: expected parameter declarator
A m_a( "asdf" );
^
<source>:23:12: error: expected ')'
<source>:23:10: note: to match this '('
A m_a( "asdf" );GCC:
<source>:23:12: error: expected identifier before string constant
23 | A m_a( "asdf" );
| ^~~~~~
<source>:23:12: error: expected ',' or '...' before string constantEz
A m_a = A( "asdf" );
ill. ezA m_a = { "asdf" };
is működőképes. Az elsőt még csak-csak értem, mert az, ha nem tévedek valami copy constructoros móka, bár nem tudom, hogy mennyire effektív, de a második, háááát.I did nothing, the pavement was his enemy!
-
dabadab
titán
A válasz nagyon egyszerű: azért nem megy, mert a C++ szabvány nem engedi
A "miért nem engedi?" kérdésre talán az a válasz, hogy kinézetre nagyon hasonlít a metódusdeklarációra, nem tudom.
Szóval ami lehetőség marad, az a copy initializing (amit te is írtál) vagy, ami az adott esetben értelmesebb, a közvetlen brace-es (direct list initialization):class B
{
private:
A m_a{"asdf"};
public:
std::string get()
{
return m_a.get();
}
};
[ Szerkesztve ]
DRM is theft
-
weiss
addikt
Így? Ez sem műxik. De mindegy, mert megoldás van. Igazából tényleg az érdekel mi a különbség a kettő között, mindkettő változó definíció inicializálással.
class B
{
private:
A m_a;
public:
B()
{
m_a( "asdf" );
}dabadab: Viszont azzal a metódusdeklarációval igazad lesz, mert majdnem ugyanúgy néz ki.
[ Szerkesztve ]
I did nothing, the pavement was his enemy!
-
ngl0323
újonc
Sziasztok!
Bin fájl elhomályosítás megvalósítására keresek embert.
Találtam neten kapcsolatos kész projektet hozzá, de működésre kéne bírni. Akit tudna segíteni, kérem jelezze.https://www.codeproject.com/Articles/856846/Binary-Obfuscation
-
Tomi_78
tag
Sziasztok!
Code: locks segítségével C++-ban próbálok egy windowsos grafikus játékot készíteni. Tehát nem konzolos programot.
Jó lenne kiíratnom a magyar ékezetes betűket is, ha lehet. De nem tudom, hogyan kell...
Próbáltam ezzel a lehetőséggel:
#include <locale>
és utána:
setlocale(LC_ALL, "hun");De rá se bagózik a program. Valaki tudna segíteni nekem ezügyben?
-
sztanozs
veterán
válasz Tomi_78 #4380 üzenetére
A grafikus konyvtar - amit hasznalsz - tamogatja a unicode stringeket?
Ha jol remlik, akkor a parancs amit kiadtal, csak a konzolra vonatkozik.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Tomi_78
tag
válasz sztanozs #4381 üzenetére
Azt nem tudom, hogy támogatja-e és hogy egyáltalán milyen grafikus könyvtárat használok.
Ezeket a header fájlokat illesztettem be eddig:
#include <tchar.h>
#include <windows.h>
#include <vector>
#include <locale>
A képernyő alján az van többek között, hogy UTF-8 meg a jobb szélén egy amerikai zászló. De ezekre hiába kattintok, nem történik semmi, tehát máshol kellene beállítani ezt. -
kispx
addikt
válasz Tomi_78 #4384 üzenetére
The wingdi.h header defines TextOut as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. [link]
1) A project beállítások között definiáld a UNICODE preprocesszor konstanst.
2) használj wchar_t-n alapuló stringet: LPCWSTR (emiatt strlen helyett wcslen függvényt kell majd használnod kell majd használnod 5. paraméterként
3) a forrásfájl karakterkódolása is legyen Unicode -
kispx
addikt
válasz Tomi_78 #4386 üzenetére
Nagyon sok éve nem láttam a Code :: Blocks-ot, így fejből nem tudom.
Ha még releváns ez a 2017-es fórum, akkor project szinten nem tudod beállítani, csak MAKE fájl szerkesztésével. Vagy globálisan (minden projectre kiterjedően) a #define fülön
A harmadik pontot pedig az Edit > File encoding menüponttal tudod elméletileg beállítani. -
Tomi_78
tag
És arra vannak utasítások C++-ban, amivel lekérdezhető a felhasználó monitorának mérete, hogy a program ablaka mindig kitöltse a képernyőt?
Mert most én perpillanat csak konkrét számokat tudok megadni a hwnd-nek, de ez így nem jó. -
DrojDtroll
addikt
válasz Tomi_78 #4388 üzenetére
windows - How to get screen resolution in C++? - Stack Overflow
Google a barátod. -
Tomi_78
tag
válasz DrojDtroll #4389 üzenetére
Ezt láttam már, de sajnos nem működik: a WM_RESIZE ágra ír ki valami hibát.
De most próbálkoztam így is:
HWND kijelzo=GetDesktopWindow();
ablakszel=kijelzo.right;
ablakmag=kijelzo.bottom;De ez sem jó: error: request for member 'right' in 'kijelzo', which is of pointer type 'HWND {aka HWND__*}' (maybe you meant to use '->' ?)|
-
Tomi_78
tag
válasz DrojDtroll #4391 üzenetére
Igen, azt is.
És ilyeneket ír ki: error: jump to case label [-fpermissive]
erre:
HWND kepernyo = GetDesktopWindow();
RECT kijelzo;
ablakszel = LOWORD(GetWindowRect ( kepernyo, &kijelzo ));
ablakmag = HIWORD(GetWindowRect ( kepernyo, &kijelzo )); -
Tomi_78
tag
válasz DrojDtroll #4393 üzenetére
Már nagyjából sikerült megoldanom, mégpedig azzal, hogy a WM_CREATE-ből átraktam a program tetejére a változók létrehozását, illetve a képernyőméret lekérdezést az ablak létrehozása elé.
De még valahogy el kéne tüntetnem az ablak tetejéről a címsort vagy letiltani a felhasználó általi átméretezhetőségét.
Ebben tudtok segíteni nekem? -
Tomi_78
tag
És még egy kérdésem/gondom van a fejlesztendő programommal kapcsolatban: a címképernyőjén egy olyan animációt szeretnék, hogy a képernyő közepéből jönnek ki a csillagok véletlen irányba, és ez a "csillagkirobbanás" ismétlődne.
Egy ciklussal 22 csillagot hozok létre, de a hatás finoman szólva nem az, amit szeretnék, mert mindig csak 4 irányba mennek a csillagok, nem pedig véletlenszerűen.
Ez a csillagok osztálya:
class Csillag {
public:
Csillag(int xh, int yh) {
xhely = xh;
yhely = yh;
fajta = rand()%2;
szin = rand()%2;
do {
celx = rand()%ablakszel;
} while (celx==xhely);
if (celx < xhely)
xseb = -8;
else xseb = 8;
do {
cely = rand()%ablakmag;
} while (cely==yhely);
if (cely < yhely)
yseb = -8;
else yseb = 8;
};
void kirajzol(HDC grafkez) {
if (fajta == 0) { //Csak egy pont:
if (szin == 0)
SetPixel(grafkez,xhely,yhely,RGB(255,255,255));
else
SetPixel(grafkez,xhely,yhely,RGB(255,255,0));
} else { //+ alakú:
if (szin == 0) {
SetPixel(grafkez,xhely,yhely,RGB(255,255,255)); //Közepe
SetPixel(grafkez,xhely-1,yhely,RGB(255,255,255)); //Közepétől balra
SetPixel(grafkez,xhely+1,yhely,RGB(255,255,255)); //Közepétől jobbra
SetPixel(grafkez,xhely,yhely-1,RGB(255,255,255)); //Közepe fölött
SetPixel(grafkez,xhely,yhely+1,RGB(255,255,255)); //Közepe alatt
}
else {
SetPixel(grafkez,xhely,yhely,RGB(255,255,0)); //Közepe
SetPixel(grafkez,xhely-1,yhely,RGB(255,255,0)); //Közepétől balra
SetPixel(grafkez,xhely+1,yhely,RGB(255,255,0)); //Közepétől jobbra
SetPixel(grafkez,xhely,yhely-1,RGB(255,255,0)); //Közepe fölött
SetPixel(grafkez,xhely,yhely+1,RGB(255,255,0)); //Közepe alatt
};
};
};
int xhely,yhely,celx,cely;
unsigned char fajta,szin;
char xseb,yseb;
bool tulcelxen=false,tulcelyon=false;
};
std::vector<Csillag> csillagok;Ez pedig a kirajzolásuk a WM_PAINT-ben:
for (int cs=0; cs<csillagok.size(); cs++) {
if (csillagok[cs].tulcelxen == false) {
csillagok[cs].xhely += csillagok[cs].xseb;
if ((csillagok[cs].xhely >= csillagok[cs].celx && csillagok[cs].xseb == 8) || (csillagok[cs].xhely <= csillagok[cs].celx && csillagok[cs].xseb == -8))
csillagok[cs].tulcelxen = true;
} else csillagok[cs].xhely += csillagok[cs].xseb;
if (csillagok[cs].tulcelyon == false) {
csillagok[cs].yhely += csillagok[cs].yseb;
if ((csillagok[cs].yhely >= csillagok[cs].cely && csillagok[cs].yseb == 8) || (csillagok[cs].yhely <= csillagok[cs].cely && csillagok[cs].yseb == -8))
csillagok[cs].tulcelyon = true;
} else csillagok[cs].yhely += csillagok[cs].yseb;
if (csillagok[cs].xhely<0 || csillagok[cs].xhely>ablakszel || csillagok[cs].yhely<0 || csillagok[cs].yhely>ablakmag) {
csillagok[cs].xhely = ablakszel/2;
csillagok[cs].yhely = ablakmag/2;
do {
csillagok[cs].celx = rand()%ablakszel;
} while (csillagok[cs].celx == csillagok[cs].xhely);
if (csillagok[cs].celx < csillagok[cs].xhely)
csillagok[cs].xseb = -8;
else csillagok[cs].xseb = 8;
do {
csillagok[cs].cely = rand()%ablakmag;
} while (csillagok[cs].cely == csillagok[cs].yhely);
if (csillagok[cs].cely < csillagok[cs].yhely)
csillagok[cs].yseb = -8;
else csillagok[cs].yseb = 8;
csillagok[cs].tulcelxen = false;
csillagok[cs].tulcelyon = false;
};
csillagok[cs].kirajzol(Memhdc);
};Gyanítom, valami akkor nem lesz jó, mikor a képernyőn kívülre kerülve visszahelyezem őket a közepére, és új célxy koordinátát kapnak véletlenszerűen, de akárhogy nézem, nem látok benne semmi logikai hibát.
-
jattila48
aktív tag
válasz DrojDtroll #4391 üzenetére
Amit a GetDesktopWindow visszaad, az csak egy window handle, nem struktúra pointer. Próbálkozz a
HWND kijelzo=GetDesktopWindow();
RECT rect;
GetWindowRect(kijelzo,&rect);kóddal.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz Tomi_78 #4392 üzenetére
A GetWindowRect bool típussal tér vissza. Mit akarsz abból kiszedni? Azt csak ellenőrizni kell, hogy sikerült-e a fv. hívás. A RECT típusú 'kijelzo' változóban (struktúrában) vannak a keresett értékek:
ablakszel=kijelzo.right-kijelzo.left;
ablakmag=kijelzo.bottom-kijelzo.top;Bizonyos esetekben a left és top tagok negatívak is lehetnek (a drop shadow miatt?), de itt ez nem fordul elő.
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz Tomi_78 #4394 üzenetére
"WM_CREATE-ből átraktam a program tetejére a változók létrehozását, illetve a képernyőméret lekérdezést az ablak létrehozása elé."
Nem ezen múlik a dolog. Az ablakkezelő WM_CREATE ágát a CreateWindow fc. hívja meg. A legtöbb inicializálás (ablakhoz kapcsolódó, főablak esetén ptogramhoz kapcsolódó is) itt szokott megtörténni. Az itt létrehozott objektumokat (handle-kat, stb.) a WM_DESTROY ágban (amit a WM_CLOSE ágban kiadott DestroyWindow fv. fog meghívni) kell lebontani, lezárni.
Az, hogy az ablaknak van-e címsora, vagy méretezhető-e, a CreateWindow (vagy CreateWindowEx) fv. dwStyle (és dwExStyle) flag paramétereivel kell megadni, vagy esetleg az ablakosztály megfelelő stílusát (WNDCLASSEX típusú struktúra style tagja) kell beállítani, mielőtt a RegisterClassEx fv.-t meghívod.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
Dánkas
csendes újonc
Kitöltenétek? Az első kérdés nem hiba, inkább olyan "beugratós".
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!