【发布时间】:2022-03-02 16:14:19
【问题描述】:
我有这样的功能
template <typename T>
double vectortest(int n, bool prealloc) {
std::vector<T> tester;
std::unordered_set<T> seq = generatenums<T>(n);
}
其中 generatenums 是另一个模板化函数
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++ 模板的类型,是否有办法解决这个问题?
【问题讨论】:
-
首先,
typedef关键字不属于那里。去掉它。然后它已经在std::unordered_set<Filler>失败了。std::unordered_set要求您定义operator==和std::hash特化。那么你的vectortest和generatenums都缺少return 语句并且不知道tester的用途。 -
这能回答你的问题吗? How can I use a C++ unordered_set for a custom class? 和 C++ unordered_map using a custom class type as the key(
unordered_set和unordered_map要求相同) -
您忘记为
typedef添加新别名。总是值得阅读错误的内容。 -
C++ 的错误消息可能非常可怕,尤其是使用模板时。阅读它们的方法是滚动到错误的最顶部,only 读取并处理第一个错误。然后再试一次。大多数“大量错误”是第一个错误的结果,如果你愿意的话,有点“涓涓细流”。
标签: c++