Lassen Sie uns sagen, dass ich mehrere Containerklassen wie diese haben:Templated Feste + Variable-sized Klasse
template<typename T> class Container
{
/* ... */
};
template<typename T, size_t> class Array : public Container<T>
{
/* Fixed-sized Container */
};
template<typename T> class Vector : public Container<T>
{
/* Variable-sized Container */
};
Und ich habe eine Klasse, die eine von diesen als Template-Parameter akzeptiert:
template<typename T, template<typename> class U, size_t M> class Polygon
{
U<T> Vertices; // Problem, what if user passes Array (it needs 2 parameters)
U<T, M> Vertices; // Problem, what if the user wants to use a variable-sized container (it needs only 1 parameter)
};
Meine Frage ist, kann ich irgendwie (wohl durch knifflige Template-Parameter-Magie) die verbrauchende Klasse dazu bringen, jede Art von Container (fest oder variabel, auch mit unterschiedlichen Template-Signaturen) zu akzeptieren?
Die einzigen Garantien über die Vorlage Signaturen sind, wenn es ein fester Größe Container ist, wird es zwei Parameter haben <Type, Size>
und eine, wenn es sich um eine Variable-sized Behälter ist <Type>