Ich möchte eine Funktion mit dieser Schnittstelle.Wie deklariert man eine Template-Funktion mit einem optionalen Kompilierzeitparameter?
func<Type1,CompileOption>(Type2 value)
//or
func<Type1>(Type2 value)
Der erste Parameter für die Kompilierzeit ist ein Typ. Dies ist bei jedem Funktionsaufruf erforderlich.
Der zweite Kompilierzeitparameter ist optional. Es wird verwendet, um das Verhalten von func
zu ändern.
Die Funktion selbst wird auf den regulären Parametertyp (Type2
) eingestellt.
Kann eine Schnittstelle wie diese gebaut werden?
Wenn es nicht möglich ist, gibt es eine Möglichkeit, ähnliches Verhalten zu erhalten? zB etwas, das wie eine Template-Funktion funktioniert, die zwei Parameter für die Kompilierung benötigt, wobei die zweite optional ist?
Der naive Ansatz funktioniert nicht.
// invalid syntax
template< typename Type1, typename CompileOption = Default, typename Type2>
void func(Type2 t2);
// Does the wrong thing.
// CompileOption Parameter now change Type2.
template< typename Type1, typename Type2, typename CompileOption = Default>
void func(Type2 t2);
//This kinda expresses what I'm looking for
template<typename Type2>
template<typename Type1, typename Optional = Default >
void func(Type2 t2);
Die erste Option ist keine ungültige Syntax. Angenommen, Sie verwenden einen C++ 0x-Compiler (da Sie scheinbar Standard-Template-Argumente in Funktionsschablonen verwenden dürfen), können Sie auch Standardargumente für nicht nachgestellte Template-Parameter verwenden. –