Ich weiß, dass es Fragen mit dem gleichen Thema gibt, aber dieses fragt nach etwas Spezifischerem.Übergeben Sie einen Typennamen an einen Vorlagenoperator
Ich erstelle einen Mehrzweck-Templat-Container für den persönlichen Gebrauch. Die Details sind nicht wichtig, aber hier sind grundlegende Operatoren, die ich mit meinem Behälter verwenden wollte:
obj[n]
, die zurückgibt seine eigene Art, so dass es verwendet werden kann Werte zuzuordnen, wie inobj[n]=value;
(als L-Wert)überladenen
obj[n]
welchen Wert in dem "Array", wie insomething=obj[n];
(als R-Wert)
der zweite überladene Operator ist derjenige I nach tal will gespeichert abgerufen kehrt k ungefähr.
ein äußerst minimal Beispiel verwenden, sind hier die grundlegenden Aussehen meiner Klasse:
template <typename T1, typename T2>
class example
{
/*some private and public definitions*/
example<T1, T2>& operator[] (int n)
{
current = n;
return *this;
}
template <typename U>
U operator[] (int n)
{
/*some operations*/
return something;
}
};
Das Problem ist, möchte ich den Rückgabewert des überladenen Operator parametrisieren.
Ich habe hier in stackoverflow eine Frage gelesen, dass dies nur durch expliziten Aufruf des Operators möglich ist.
Meine Frage ist, wie kann ich dieses Problem umgehen, so dass, wenn ich einen üblichen Operator Aufruf nicht parametrisieren kann, zumindest meinen rvalue Operator [] anders zu implementieren, was ich erreichen will, um möglich zu sein?