gpt4 book ai didi

c++ - 如何使用模板定义函数的 header 以检查 C++ 中的映射

转载 作者:行者123 更新时间:2023-11-30 03:49:57 26 4
gpt4 key购买 nike

我喜欢做一个函数来检查两个具有键/值对的映射,其中键和值可以是任何类型的类实例。

我首先尝试的(编译):

template<typename T>
bool EqualsMap(int lineNumber, T_String mapText, const T& mapToCheck,
T_String expectedText, const T& expectedMap)
{
...
}

但在这种情况下,它可以接收任何类型的类(不仅是 map ),而且转换可能会导致问题。

以下是我喜欢的:

template<class T1, class T2>
bool EqualsMap(int lineNumber, T_String mapText, map<T1, T2> mapToCheck,
T_String expectedText, map<T1, T2>expectedMap)
{
...
}

但是这不会编译(或者...<之前预期的)

如何实现此函数的 header 以接受两个类型相同的映射?

最佳答案

应该只是

template<class Key, class Value>
bool EqualsMap(int lineNumber, T_String mapText,
const std::map<Key, Value>& mapToCheck, T_String expectedText,
const std::map<Key, Value>& expectedMap)
{
...
}

当然不要忘记#include <map> .如果你想使用任何类似 map 的类,你可以使用类似的东西

template<template<typename, typename, typename, typename> class Map,
class Key, class Value, class Alloc, class Comp>
bool EqualsMap(int lineNumber, T_String mapText,
const Map<Key, Value, Alloc, Comp>& mapToCheck, T_String expectedText,
const Map<Key, Value, Alloc, Comp>& expectedMap)
{
...
}

如果你可以使用 C++11,它可以是这样的

template<typename Container>
auto EqualsMap(int lineNumber, T_String mapText,
const Container& mapToCheck, T_String expectedText,
const Container& expectedMap) ->
decltype(std::declval<Container>().begin()->first, bool())

这里函数将仅用于容器,value_type 具有成员优先(如 std::pair)。

关于c++ - 如何使用模板定义函数的 header 以检查 C++ 中的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32137485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com