我有一个模板结构。struct foo有嵌套类型。
template<typename Data>
struct Bar{
};
template<typename Data>
struct Foo {
typedef typename std::pair<Bar<Data>*,Foo<Data>*> Pointers;
std::unordered_set<Pointers> pointers;
};
我想使指针可哈希,这将适合标准::unordered_set
我在这里读到:<br>如何专门化无序容器中用户定义类型的std::hash::operator()
如何正确散列自定义结构
boost::hash_combine
模板和嵌套类/结构
并将所有知识结合到这段代码中:
namespace std {
template <typename Dara> struct hash< typename Foo<Data>::Pointers>
{
size_t operator()(const typename Foo<Data>::Pointers & x) const
{
std::size_t seed = 0;
boost::hash_combine(seed, x.first);
boost::hash_combine(seed, x.second);
return seed;
}
};
}
在最后一段代码中,编译器抛出一个错误:错误:模板参数未用于局部特化:
Data
at the point to here: typename Data。
我尝试从模板中删除数据并这样使用:
模板
我如何更正我的代码?
问候,塔尔。
我找到了更简单的解决方案:添加boost::hash:
使Foo结构如下:
template<typename Data>
struct Foo {
typedef typename std::pair<Bar<Data>*,Foo<Data>*> Pointers;
std::unordered_set<Pointers,boost::hash<Pointers> pointers;
};
从这里阅读:
匿名用户
您不能专门化嵌套类型。编译器无法推断出你试图专门化的东西。您可以专门化< code>std::hash
namespace std {
template <typename Data>
struct hash<std::pair<Bar<Data>*,Foo<Data>*>> {
...
}
}
请注意,指针通常不是好的键。您可能需要使用<code>*x。首先和*x。第二个
使用<code>hash_combine()。
本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结
注意:这个问题被简单地标记为这个问题的重复,但它不是完全的重复,因为我是专门询问std::optionals的。如果你关心一般情况,还是一个很好的问题。 假设我有嵌套的选项,如下所示(愚蠢的玩具示例): 还有这个垃圾邮件功能: 什么是压扁这张可选支票的最佳方法?我做了这样的东西,它不是可变的,但我不太关心这个(如果真的需要,我可以再添加一个级别(用),而且超出这个级别的所有东西都是可怕的代码)。
我有那段代码(这是从一个更大的项目中复制的最小值)。 它在gcc 9.2中失败,并出现以下错误: 在“constexpr const auto poly_gcd,myint”的实例化中 静态配置的自动val=poly_gcd_reduce_helper::val; 显然,编译器试图实例化poly_gcd_reduce_helper,void 我必须承认我现在不知道该怎么办。
问题内容: 是否可以将非选择查询(更新,插入,删除)嵌入到另一个查询中? 诸如此类(select内的插入) 问题答案: 基本答案 Postgres中 有 CTE* (公用表表达式) *(就像在除MySQL外的任何主要现代RDBMS中一样)。 从9.1版开始,其中包括修改数据的CTE。这些可以“嵌套”。 更新:MySQL 8.0最终添加了CTE。 与 子查询 不同,CTE构成了优化障碍。查询计划程序
前几天我问了一个关于嵌套向量的非常类似的问题,但我遇到了另一个让我难堪的问题。我需要在编译时获取嵌套向量的最内层类型,以便将其作为模板参数传递。 例如,如果我有这个嵌套向量: 我需要一种方法来提取,这样我就可以调用一个函数,它需要一个嵌套的向量,并对这样的元素工作: 除了catch之外,这个函数应该能够处理包含任何类型的任何深度的嵌套向量。当我调用时,我希望自动为我推导出内部类型。 所以也许电话看
当我编译以下代码时,我看到了与哈希相关的错误。 /tmp/ccCQFQ4N.o: 在函数“标准::__detail::_Hash_code_base ,标准::矢量 然后,我介绍了下面自己的Hash,问题就解决了。 问题 1 警告:基类“结构”std::unary_function,无符号整型 问题2 非常感谢。