Konstruktor für signed / unsigned ints



  • Ich hab' 'ne Klasse wie folgt:

    struct foo
    {
    	foo(unsigned long long);
    
    	foo(float);
    	foo(double);
    	foo(long double);
    };
    

    Nun will ich auch noch einen Konstruktor, der einen signed long long int akzeptiert, deklarieren. Das Problem ist dann, dass ich die Klasse nicht mehr mit normalen int-Literalen konstruieren kann (oder mit irgendwelchen anderen integralen Typen außer unsigned long long und long long ).
    Ich könnte theoretisch auch einfach Überladungen für alle integralen Typen anbieten und dann einfach intern hochcasten und delegaten; find ich allerdings nicht sehr schön.

    Was ist hier Best Practice?



  • Eine Möglichkeit wäre ein Template-Konstruktor (bzw. zwei) die du mittels enable_if<is_integral && is_signed> bzw. enable_if<is_integral && is_unsigned> (sinngemäss) einschränkst.

    Vielleicht reicht aber auf einfach der long double Konstruktor und alle anderen sind für die Würste.

    Oder vielleicht wäre es überhaupt angesagt einfach nur einen einzigen template Konstruktor zu machen.

    Kann man so nicht sagen, müsste man wissen was genau du damit anstellen willst. Also z.B. was die verschiedenen Konstruktoren die du da bereits hast so machen.

    Oder vielleicht doch genau das was du sagst, nämlich wenn das an millionen Stellen aufgerufen wird, und die Compilezeiten nicht unnötig leiden sollen.


Log in to reply