|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
[C++] assurdità
qualcuno mi saprebbe spiegare per quale assurdo motivo lo standard del C++ non ammette i tipi a virgola mobile come template parameters?
è una cosa completamente senza senso, del tutto immotivata: si tratta di una feature implementabilissima, tant'è che la Microsoft per aderire allo standard l'ha dovuta togliere da Visual C++ .NET, creando tra l'altro un breaking change. Strùtrup è un c******e -.-' |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
fìììco
__________________
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
![]() W il C++ ![]() ![]()
__________________
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
OT
ma non ti conveniva usare la tavolozza di colori ottimizzata piuttosto che il dithering nell'avatar?
__________________
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Quote:
__________________
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
scusate ma nell'esempio che c'è qui
questo pezzo: Codice:
// allocate memory: buffer = new char [length]; Codice:
// allocate memory: buffer = new char [length+1];
__________________
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Codice:
cout.write (buffer,length);
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Per inciso non mi viene in mente un esempio pratico di utilizzo di floating point come parametri template. Qualche idea ?
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Una lista/stack/coda/lista doppiamente concatenata/ecc. di float?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#10 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
effettivamente questo ha senso...Quote:
senza poter passare i numeri a virgola mobile come template parameters invece devo fare una classe base che contiene un campo double che è il valore della costante, e poi N classi derivate ciascuna delle quali chiama il costruttore protetto nella classe base passandogli la rispettiva costante. inoltre le N classi derivate hanno anche qualche altra specializzazione, per esempio ciascuna di esse ritorna il nome della costante ("pi", "e", ecc.). Quote:
Codice:
list<float> ListOfFloatNumbers; Codice:
template<float _Value>
class Constant
{
public:
// ...
};
...
Constant<M_PI> PI;
|
|||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Non capisco neanch'io questo limite però...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
), e quindi la costante deve costituire un tipo di espressione rappresentata come classe che risponda ad una certa interfaccia; nello specifico doveva avere un metodo Derive che calcola la derivata (cioè 0) e un metodo Simplify che resituisce this, più un po' di altra roba.ne volevo fare un template perché così non dovevo scrivere una classe per ogni costante matematica usata. |
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
io ho interpretato il discorso di marco.r in questa maniera; metti che uno scrive una cosa del genere:
Codice:
template<float _Value>
class Floated
{
// ...
};
Floated<1> First;
Floated<1.0> Second;
Floated<2-1> Third;
...
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ah ok, non avevo capito quale fosse il tuo scopo. Be', in questo caso mi sembra più che giusto. Non avendo la possibilità di usare template, puoi pensare di salvare separatamente queste costanti? Così poi le tratti nei casi particolari quando derivi la formula o la semplifichi.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Codice:
class Expression
{
public:
virtual operator string () const = 0;
virtual Expression *Derive() = 0;
virtual Expression *Simplify() = 0;
};
class Constant : public Expression
{
public:
Expression *Derive();
Expression *Simplify();
};
class PI : public Constant
{
public:
operator string () const;
};
class E : public Constant
{
public:
operator string () const;
};
Codice:
Expression *Constant::Derive()
{
// ritorna un'espressione che vale costantemente 0
}
Expression *Constant::Simplify()
{
return this;
}
PI::operator string () const
{
return "pi";
}
E::operator string () const
{
return "e";
}
mentre invece avrei voluto fare: Codice:
template<double _Value, const char *_Name>
class Constant : public Expression
{
public:
operator string () const
{
return _Name;
}
Expression *Derive()
{
// ritorna un'espressione che vale costantemente 0
}
Expression *Simplify()
{
return this;
}
};
typedef Constant<M_PI, "pi"> PI;
typedef Constant<M_E, "e"> E;
|
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Allora anche questo non va bene: Codice:
template<char _param> class MrX [...]
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
mai sentito parlare di ABI mismatch?
|
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ottima soluzione, in effetti... dovrei esercitarmi di più con la OOP...
Certo era più comodo (ed "elegante") con un template, ma finché funziona...
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Eh peccato che puoi decidere con un flag di compilazione se char debba essere signed o unsigned...e una volta mi è servito...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:59.













effettivamente questo ha senso...








