簡體   English   中英

在 C++ 模板中使用 struct 作為類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM