Nur der Vollständigkeit halber, Sie benannten Argumente verwenden könnte, wenn Ihr Anruf wird.
void allocate_things(num_buffers=20, pages_per_buffer=40, default_value=20);
// or equivalently
void allocate_things(pages_per_buffer=40, default_value=20, num_buffers=20);
jedoch mit der aktuellen C++ dies erfordert ziemlich viel Code implementiert werden (in der Header-Datei erklärt allocate_things()
, die auch entsprechende externe Objekte num_buffers
usw. bietet operator=
, die ein einzigartiges geeignetes Objekt zurückgeben erklären muss).
---------- Beispiel arbeiten (für sergej)
#include <iostream>
struct a_t { int x=0; a_t(int i): x(i){} };
struct b_t { int x=0; b_t(int i): x(i){} };
struct c_t { int x=0; c_t(int i): x(i){} };
// implement using all possible permutations of the arguments.
// for many more argumentes better use a varidadic template.
void func(a_t a, b_t b, c_t c)
{ std::cout<<"a="<<a.x<<" b="<<b.x<<" c="<<c.x<<std::endl; }
inline void func(b_t b, c_t c, a_t a) { func(a,b,c); }
inline void func(c_t c, a_t a, b_t b) { func(a,b,c); }
inline void func(a_t a, c_t c, b_t b) { func(a,b,c); }
inline void func(c_t c, b_t b, a_t a) { func(a,b,c); }
inline void func(b_t b, a_t a, c_t c) { func(a,b,c); }
struct make_a { a_t operator=(int i) { return {i}; } } a;
struct make_b { b_t operator=(int i) { return {i}; } } b;
struct make_c { c_t operator=(int i) { return {i}; } } c;
int main()
{
func(b=2, c=10, a=42);
}
Compiler helfen Sie die meiste Zeit. Ansonsten sind es Ihre (Programmier-) Verantwortlichkeiten. –
Ist das in C++ mit bestimmten Typen nicht so einfach? – alk
Wenn die Parameter logisch organisiert sind (a, b.c, d, e ...), wird es leicht, sich alle in der richtigen Reihenfolge zu merken. –