2016-05-09 4 views
2

zu starten Ich bin mir ziemlich sicher, dass es unmöglich ist, aber nur eine Gewissheit zu bekommen - ist es möglich, verschiedene unäre Operator * "Überladungen" aufzurufen (?) auf dem Iterator der Sammlung je nach verwendetem Typ in einem auf Basis von. Ich bin besonders interessiert in Berufung auf zwei verschiedene Überlastungen für:Ist es möglich, verschiedene Überladungen von Dereferenzierungsoperator abhängig von der Art der Bereichsbasierte für

for (auto &e: collection) 

und

for (auto e: collection) 

Aber die Frage für bestimmte Art von e allgemeineren sein kann.

+1

"Ist es möglich ..." -> Haben Sie das versucht? Hat es funktioniert? Wenn nein, was funktioniert nicht wie erwartet? – ForceBru

+1

Wie werden die Operatoren überlastet? – NathanOliver

+0

@ForceBru Wie gesagt - ich bin mir ziemlich sicher, dass es unmöglich ist, weil ich nicht einmal weiß, welche Syntax es beinhalten würde ... Die Frage beim Implementieren einer 'trie' Sammlung für meinen Zweck ... –

Antwort

1

Ich bin mir nicht bewusst, dass es möglich ist.

Aber Sie können durch Iteration über verschiedene Proxy-Objekte ähnliches Verhalten erhalten:

for (auto &&e: collection.method1()) 
// ... 
for (auto &&e: collection.method2()) 

Die Proxy-Objekte zurückgegeben durch method1 und method2 implementieren begin und end Funktion, die verschiedene Arten von Iteratoren zurückgeben, die operator* unterschiedlich implementieren.

+0

Funktioniert nicht für die Standard-Container obwohl ... – StoryTeller

+0

Noch sehr interessante Idee ... –

+3

@ WojciechFrohberg, gut. Eine Adapterklasse über einen Standardcontainer ist möglicherweise möglich. 'method1 (std_container)'. Und wird sich tatsächlich auf jedes "stl" -ähnliche Objekt erstrecken, beispielsweise auf die Boost-Container. – StoryTeller

Verwandte Themen