Ich habe so gesehen Probleme vor allem, wenn Sie mit einer großen und alten Code-Basis zu tun haben. Die beste Lösung wäre, die Dinge so umzugestalten, dass Sie nicht mit einem solchen Problem konfrontiert werden, aber ich verstehe, dass Sie manchmal unter Druck stehen und mit minimalen Änderungen auskommen müssen.
Für so etwas, würde ich empfehlen, eine Klasse zu erstellen, die die Parameter für diese Funktion kapseln würden. Und diese Klasse würde die Builder-Entwurfsmuster haben:
https://en.wikipedia.org/wiki/Builder_pattern
Damit Sie flexibel sein würde, in dem Parameter würden Sie passieren.
Im Beispiel du hast, könnten Sie so etwas wie diese:
class FuncParams
{
public:
A& getA();
B& getB();
C& getC();
D& getD();
class FuncParamsBuilder
{
FuncParamsBuilder& setA(A& a);
FuncParamsBuilder& setB(B& b);
FuncParamsBuilder& setC(C& c);
FuncParamsBuilder& setD(D& d);
FuncParams *build();
}
static FuncParamsBuilder& builder();
}
Dann würde Ihr Funktionsaufruf nur sein:
void func(FuncParams *params);
Und man könnte es so nennen:
func(FuncParams::builder().setA(a).setC(c).build());
Beachten Sie, dass dies nicht ein perfekter Weg, um dies zu kodieren: Sie können den Code-Schnipsel anpassen sollten oben um besser zu passen, was du versuchst zu tun. Sie können auch denken, wenn Sie Zeiger, Referenzen oder, noch besser, intelligente Zeiger wie unique_ptr Objekte verwenden möchten. Ich hoffe das hilft!
benannte Parameter Idiom (auch bekannt als das Builder-Muster), structs (vor allem in C++ 20 mit designierten Initialisierer) [Boost-Parameter] (http://www.boost.org/doc/libs/1_65_1/libs/parameter /doc/html/index.html) (oder ähnliche Bibliotheken) – Justin
Ich glaube nicht, dass es gerade da ist, 'va_arg' lässt ein ähnliches Feature zu, aber ich bin mir ziemlich sicher nicht dasselbe. http://www.cplusplus.com/reference/cstdarg/va_arg/ –
Dies wird oft gefragt, aber ich habe es selten mit einem tatsächlichen realen Beispiel gefragt, wo es kein Designproblem gab. Vielleicht sind Sie anders - in diesem Fall post more Details Ihres Problems und Designs. –