Fråga angående funktions parametrar i C++
Det är typ bit-wise flaggor.
exempel:
void minFunktion(int flags)
{
int arg1 = 1; // första biten
int arg2 = 2;
int arg3 = 4;
int arg4 = 256 // 9'onde bit-en
if( flags & arg1 == arg1) // Detta betyder att (00100101 & 00000001) == 00000001\
// ..eftersom sista ettan finns på båda argumenten
{
// Gör något
}
// if( etc....
}
Sen så kan du göra det där med en switch istället för if osv. Sök på bitwise operators för att hitta mer.
Sedan så kör man defines med fina namn istället för bara siffror sådär.
Som sades tidigare så är dessa flaggor "bit masks". Och de OR:as ihop för att kombinera dem till ett argument.
std::ios_base::openmode myMode = ios:app | ios:ate | ios::binary;
Och det kommer inte spela någon roll vilken ordning du OR:ar ihop dem (om du inte gör något obskyrt) myMode kommer bli detsamma.
// i main.cpp
#include <cstdint>
#include <iostream>
// Ett sätt att skapa sina värden på.
namespace MyNamespace
{
typedef std::uin32_t MyMode;
const MyMode MY_MODE_1 = 1;
const MyMode MY_MODE_2 = 2;
const MyMode MY_MODE_3 = 4;
// litet försök att undvika duplicering av kod
void PrintIfTrue(bool condition, const std::string & message)
{
if(condition)
{
std::cout << message << std::endl;
}
}
void PrintBitMasks(const MyMode & mode)
{
// Kolla om användaren har tagit med MY_MODE_1
PrintIfTrue(((MY_MODE_1 & mode) == MY_MODE_1), "MY_MODE_1");
// Kolla om användaren har tagit med MY_MODE_2
PrintIfTrue(((MY_MODE_2 & mode) == MY_MODE_2), "MY_MODE_2");
// Kolla om användaren har tagit med MY_MODE_3
PrintIfTrue(((MY_MODE_3 & mode) == MY_MODE_3), "MY_MODE_3");
}
}
int main(int argv, char ** argc)
{
// Ett sätt att göra det på.
MyNamespace::MyMode mode = MyNamespace::MY_MODE_2 | MyNamepace::MY_MODE_3;
MyNamespace::PrintBitMasks(mode);
// Ett annat sätt att göra det på.
MyNamespace::PrintBitMasks(MyNamespace::MY_MODE_1 | MyNamepace::MY_MODE_3);
return 0;
}
Så här borde det fungera att göra om jag inte har gjort några tabbar såhär på morgonkvisten innan första kaffet. Hoppas det hjälper.
Tack för de snabba svaren!
Har kollat in bit-masks och har helt klart fått en bättre förståelse för hur saker och ting fungerar. Hade även en liten dold agenda bakom frågan, vilket var att se om jag kunde implementera en liknande egenskap i mitt program jag håller på att bygger. Med hjälp av era svar så insåg jag att bit-mask inte fungerade för det jag försöket göra, men på grund av var jag letade om bit-masks kom jag över lite annan information som höll en potentiell lösning. Efter ytterligare informations sökning kom jag på att även om den lösningen hade funkat hade det vart jobbigt att programmera och jobbigt för användaren att använda, så tänkte om hela approachen och kom på något helt nytt som var mycket enklare och mer standard.
Så ni har definitivt vart hjälpsamma och jag tackar hemskt mycket!
- Igår 27 år senare – Winamp får öppen källkod 30
- Igår Grafikprestanda i Ghost of Tsushima – en välpolerad PC-version 16
- Igår Microsoft: Byt till Bing om du vill reparera din dator 28
- Igår Grand Theft Auto VI släpps hösten 2025 26
- 16 / 5 IOS 17.5 återställer raderade bilder – även på nollställda enheter 52
- 27 år senare – Winamp får öppen källkod30
- Så ska bankerna ta hårdare tag mot bedragare61
- TV-guiden 2023/24 – diskussionstråden641
- E-handelssidan Temu anmäls för kundmanipulering71
- Gräva ner TP kabel40
- Tele 2 TV Flexibel - En review av tjänsten efter 6 månaders användning11
- Vilken alkoholhaltig dryck dricker ni just nu?5708
- Dagens fynd — Diskussionstråden49643
- Plats för lite gubbgnäll9897
- Blandade VR-nyheter1581
- Säljes PS4 500GB
- Säljes GeForce RTX 3080 Ti
- Köpes Mobil till dottern för Roblox etc
- Säljes IPhone 13 128gb
- Säljes ASUS ROG Swift 27" (PG279Q)
- Säljes MSI GeForce GTX 980 Ti Gaming
- Säljes PNY GeForce RTX 4090 Gaming VERTO EPIC-X + Corsair 12VHPWR-kabel
- Säljes Intressekoll 7700x 4090
- Säljes Helt nytt keychron v6 nordic full-size volume knob med brown/silver switchar samt iceberg dye-sub pbt keycaps
- Bytes Söker Logitech G Pro har lite att erbjuda
- 27 år senare – Winamp får öppen källkod30
- Grafikprestanda i Ghost of Tsushima – en välpolerad PC-version16
- Microsoft: Byt till Bing om du vill reparera din dator28
- Nu är Twitter officiellt X.com35
- Var med och tyck till SweClockers mobilupplevelse!24
- Grand Theft Auto VI släpps hösten 202526
- Socialdemokraterna vill införa ID-krav på sociala medier233
- Bank ID slutar fungera på äldre Apple-enheter48
- EU utreder om Instagram är skadligt för barn53
- IOS 17.5 återställer raderade bilder – även på nollställda enheter52