C++函数来返回基于参数的比较器通用映射类型?
C++ function to return comparator-generic map type based on parameter?
我想我可以使用模板魔法来完成此操作,但我不确定如何?
std::map<int,int,std::less> forward_map;
std::map<int,int,std::greater> reverse_map;
?? choose(bool forward)
{
return forward_map ? forward : reverse_map;
}
不能从同一函数返回不同的类型。请改用高阶函数:
template <typename TF>
decltype(auto) choose(bool forward, TF&& f)
{
return forward ? f(forward_map) : f(reverse_map);
}
例:
choose(true, [](auto& m){ /* `m` here is a `forward_map` */ });
choose(false, [](auto& m){ /* `m` here is a `reverse_map` */ });
您将无法使用三元运算符,因为表达式必须在:
的两侧返回相同的类型。 您也不能拥有一个在不同路径上返回不同事物的函数,除非它们是协变的,而这些不是。
现在,您可以做的是使用非类型模板并使用布尔类型,然后将该模板专用于真和假。 这将允许您具有具有相同函数名称的不同返回类型。 这样做会给你
template <bool forward> auto make_map();
template <> auto make_map<true>() { return std::map<int,int,std::less<int>>{}; }
template <> auto make_map<false>() { return std::map<int,int,std::greater<int>>{}; }
你会像使用它一样
int main()
{
auto map = make_map<true>();
auto reverse_map = make_map<false>();
}
唯一的问题是模板参数必须在编译时知道。
相关文章:
- 定义具有非标准签名的自定义映射比较器
- 如何为映射和priority_queue编写比较器,其中元素是二维数组
- 使用更大的比较器初始化映射
- STL映射比较器能否以某种方式获取指向映射本身的指针?
- 使用自定义比较器C++映射,不插入所有元素
- C++ priority_queue使用带有 lambda 比较器错误的映射
- C++:对象键的多映射自定义比较器
- C++函数来返回基于参数的比较器通用映射类型?
- c++中一对对象的映射比较器
- 映射的 Lambda 键比较器
- STL 映射自定义比较器
- 将带有自定义比较器的映射传递到功能
- 带有自定义比较器的映射不起作用
- 是否有映射的查找()以使用带参数的比较器
- 成员功能作为映射比较器
- 标准::映射与λ比较器
- 映射运算符<条件 - 无效的比较器
- 使用自己的比较器运算符()进行映射<>。在找不到 KEY 的情况下给出错误
- c++比较器函数,为映射指定特定的键顺序
- 具有透明比较器和异构意义上的非唯一元素的映射或集合