Ich möchte eine Hash-Code-Warteschlange mit variadic Vorlage erstellen. Der minimale Beispielcode istErstellen Sie Hash-Warteschlange mit variadic Vorlage
template<typename T>
void hash_queue(queue<size_t>& q){
q.push(typeid(T).hash_code());
}
template<typename T, typename... Ts>
void hash_queue(queue<size_t>& q){
hash_queue<Ts...>(q);
q.push(typeid(T).hash_code());
}
int main(){
queue<size_t> q;
hash_queue<int, float, double>(q);
return 0;
}
Auf der Kompilierung I
main.cpp: In instantiation of ‘void hash_queue(std::queue<long unsigned int>&) [with T = float; Ts = {double}]’:
main.cpp:19:22: required from ‘void hash_queue(std::queue<long unsigned int>&) [with T = int; Ts = {float, double}]’
main.cpp:25:35: required from here
main.cpp:19:22: error: call of overloaded ‘hash_queue(std::queue<long unsigned int>&)’ is ambiguous
hash_queue<Ts...>(q);
^
main.cpp:19:22: note: candidates are:
main.cpp:13:6: note: void hash_queue(std::queue<long unsigned int>&) [with T = double]
void hash_queue(queue<size_t>& q){
^
main.cpp:18:6: note: void hash_queue(std::queue<long unsigned int>&) [with T = double; Ts = {}]
void hash_queue(queue<size_t>& q){
bekommen Wie kann ich dieses Problem lösen? Ich möchte keine Instanzen der Typen erstellen. Diese Arten werden Objektklassen mit Konstruktor Klassen
Vielen Dank! Wie kann ich den Aufruf von 'hash_queue (q); '? –
ztik
Whoops, in meiner Bearbeitung behoben. – TartanLlama