template constructor
-
Hi,
gibts ne Möglichkeit einen template ctor, dessen Template-Parameter nicht implizit aufgelöst werden kann, explizit aufzurufen? Bzw, ist ein solcher ctor überhaupt erlaubt?class foo { public: template <typename T> foo() { // ... } };Sämtliche noch so kreative Aufrufversuche schlugen fehl.
-
ich hab's nicht hingekriegt, als ich das noch wollte, was aber jahre her ist.
vilelleicht hift sowas?
template<typename T> struct TypeProxy{ }; class foo { public: template <typename T> foo(TypeProxy<T>) { // ... } };nebst
foo f(TypeProxy<int>());der proxy sorgt nur dafür, daß du kein echtes objekt nehmen musst zum übergeben, das könnte evtl teuer werden, wenn's ein großer typ ist.
-
Ja, das wär natürlich eine Möglichkeit, aber mich würd interessieren, obs explizite template ctoren wirklich nicht gibt. Im Standard hab ich nichts drüber gefunden.
-
zeronull schrieb:
Ja, das wär natürlich eine Möglichkeit, aber mich würd interessieren, obs explizite template ctoren wirklich nicht gibt. Im Standard hab ich nichts drüber gefunden.
Kann es nicht geben. Da man Konstruktoren nicht explizit aufrufen kann, kann man bei ihrem Aufruf demzufolge auch nicht explizit die Typen der Templateparameter angeben.
Siehe auch 14.5.2/5 bzw. wiederholt in 14.8.1/5
-
Danke!
-
volkard schrieb:
template<typename T> struct TypeProxy{ }; class foo { public: template <typename T> foo(TypeProxy<T>) { // ... } };und dann bastelt man da vielleicht noch eine schöne funktion drum

template<class T> foo getFoo(){ return foo(TypeProxy<T>()); } foo f=getFoo<int>();