Angenommen, ich habe eine template
Funktion zu übergeben:Wie eine Template-Funktion in einer Vorlage Argumentliste
template<typename T>
T produce_5_function() { return T(5); }
Wie kann ich diese ganzen template
an einem anderen template
passieren?
Wenn produce_5_function
ein Funktor, gäbe es kein Problem sein:
template<typename T>
struct produce_5_functor {
T operator()() const { return T(5); }
};
template<template<typename T>class F>
struct client_template {
int operator()() const { return F<int>()(); }
};
int five = client_template<produce_5_functor>()();
aber ich möchte in der Lage sein, dies mit einer rohen Funktionsschablone zu tun:
template<??? F>
struct client_template {
int operator()() const { return F<int>(); }
};
int five = client_template<produce_5_function>()();
Ich vermute, die Antwort ist, "du kannst das nicht machen".
Gibt es ein wesentlicher Grund, warum Template-Template-Parameter können keine Funktionsvorlagen sein? Wird dies in Zukunft wahrscheinlich angegangen werden? – Olumide
@Olumide: Wahrscheinlich, weil es eine Menge zusätzliche Komplexität und einfach zu umgehen ist (siehe Mfontanini's Antwort). Gleiches gilt für die teilweise Spezialisierung, die viel mehr als Template-Template-Argumente verwendet wird. –