2010-01-26 21:00:30 -06:00
|
|
|
Bits of possibly less-than-obvious advice:
|
|
|
|
|
|
|
|
|
|
archutils/ contains arch-specific code. This should contain code
|
|
|
|
|
shared by more than one arch/ driver.
|
|
|
|
|
|
|
|
|
|
arch/ contains drivers for specific features that can be better
|
|
|
|
|
implemented nonportably. Most drivers (all except sound) contain
|
|
|
|
|
default, portable implementations, so StepMania should work mostly
|
|
|
|
|
out-of-the-box on platforms that are supported by the supporting
|
|
|
|
|
libraries (particularly SDL); only a sound driver needs to be
|
|
|
|
|
written.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Avoid accessing other singleton classes from singleton destructors. That
|
|
|
|
|
introduces dependencies on the order of destruction, and can cause problems
|
|
|
|
|
if one of the singletons throws an exception.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This kills VC:
|
|
|
|
|
|
|
|
|
|
template<class T> static void YY( T opt ) { }
|
|
|
|
|
enum { A } a;
|
|
|
|
|
enum { A1 } b;
|
|
|
|
|
void XX() { YY(a); YY(b); }
|
|
|
|
|
|
|
|
|
|
foo.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMDAT '?YY@@YAXW4__unnamed@@@Z'
|
|
|
|
|
|
|
|
|
|
It mangles the template incorrectly. Solution: don't use anonymous
|
|
|
|
|
enums as template parameters; give them a name.
|
|
|
|
|
|