Dakuan schrieb:
Ich hatte gehofft, dass man da irgendwie eine .o Datei erstellen könnte, die einfach nur aus Nullpointer oder so besteht, also dass der nicht benötigte Objectcode nicht oder nur in einer minimalen dummy Version eingelinkt wird. Also dass Compiler und Linker zufrieden sind ohne dass ich da weiter etwas machen muss.
Hm. In Java/Scala habe ich mal die Idee einer Nullklasse gesehen, die einem womöglich ähnlichen Zweck diente. Nach außen stellt sie alles zur Verfügung, was die richtige Klasse zur Verfügung stellen würde, aber tut nichts.
Je nach dem was die Problemlage ist, könnte das bei Dir auch klappen.
Du musst in Scenario A die Klasse Indiskutabel aufrufen, aber hast Scenario A gar nicht, sondern Scenario B. Das riecht für mich auch nach einer gemeinsamen Oberklasse, aber als notgedrungener Hack wäre unter Umständen eine TuNixKlasse als Ersatz denkbar. Es müsste halt sicher gestellt werden, dass niemand auf Attribute zugreift, die null sind, und wenn Methoden aufgerufen werden, dass sie etwas zurückliefern, wenn sie müssen, das garantiert harmlos ist.
Wenn die Methoden eh nur Seiteneffekte haben, dann sollten es leere Methodenaufrufe tun.
Eventuell musst Du ein einsames, verlassenes Semikolon in den Methodenrumpf schreiben, als NOP, da bin ich in der Syntax nicht mehr drin.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | class FooBarKomplexManager {
int i;
char** str;
float f;
double d;
public:
FooBarKomplexManager (int ip, char** sp, float fp, double dp)
{
i = ip;
str = sp;
f = fp;
d = dp;
}
FooBarKomplexManager ()
{
}
/** maybe more Code which is
- slow or
- uses much memory
- needs a costly license
- ...
*/
};
// fake Indiskutabel, only useful, to circumvent a situation, where you need an Indiskutabel pro forma.
class Indiskutabel {
public:
void mandatory (FooBarKomplexManager fbkm)
{
// ; no semicolon needed
}
};
#include <iostream>
using namespace std;
// ... usage:
int main (void)
{
Indiskutabel idkt = Indiskutabel ();
FooBarKomplexManager fbkpm;
idkt.mandatory (fbkpm);
cout << "Successfully called the mandatory method\n" ;
}
|
Ohne Gewähr, aber ausprobiert, mit und ohne solitäres Semikolon. FooBarKompleManager ist nur da, damit es imposanter aussieht. In Java könnte man idkt.mandatory (null);
aufrufen, da kenne ich die äquivalente c++-Syntax nicht.