[英]Using struct as a type in a C++ template?
我有一個 function 像這樣
template <typename T>
double vectortest(int n, bool prealloc) {
std::vector<T> tester;
std::unordered_set<T> seq = generatenums<T>(n);
}
其中 generatenums 是另一個模板化的 function
template <typename T>
std::unordered_set<T> generatenums(int n) {
std::unordered_set<T> ret;
}
請注意:我已經截斷了這些功能的全部內容,只留下我認為與我的問題相關的內容。
我也有一個結構
typedef struct Filler
{
int value;
int padding[2500];
};
我希望能夠像這樣調用我的函數
vectortest<Filler>(5, true);
但這會產生很多錯誤,讓我想知道為什么我不能將 struct 用作 C++ 模板的類型,是否有辦法解決這個問題?
結構上的unordered_set
需要自定義 hash function。
同樣,結構上的uset
需要定義 comparaor <
運算符。
#include <iostream>
#include <vector>
#include <unordered_set>
// class for hash function
template <typename T>
struct MyHashFunction {
// id is returned as hash function
size_t operator()(const T& f) const
{
return f.id;
}
};
template <typename T>
double vectortest(int n, bool prealloc) {
std::vector<T> tester;
std::unordered_set<T,MyHashFunction<T>> seq = generatenums<T>(n);
return 73.0;
}
template <typename T>
std::unordered_set<T,MyHashFunction<T>> generatenums(int n) {
std::unordered_set<T,MyHashFunction<T>> ret;
return ret;
}
struct Filler
{
int id;
int value;
int padding[2500];
};
int main(){
vectortest<Filler>(5, true);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.