Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较一个地图对象及其引用C++_C++_Reference_Stdmap - Fatal编程技术网

比较一个地图对象及其引用C++

比较一个地图对象及其引用C++,c++,reference,stdmap,C++,Reference,Stdmap,我有以下地图 map<int,string> m1; map<int,string> m2; call(m1); call(m2); template<typename T> void call(T &m) { // Compare if m == m1 How to do? } 我需要知道当前函数在运行时调用了m1和m2中的哪一个。如果要根据map的内容进行检查,可以使用: 如果要确定它们是否为同一实例,由于参数是通过引用传递的,因此可以

我有以下地图

map<int,string> m1;
map<int,string> m2;
call(m1);
call(m2);

template<typename T>
void call(T &m)
{
  // Compare if m == m1
  How to do?
}

我需要知道当前函数在运行时调用了m1和m2中的哪一个。

如果要根据map的内容进行检查,可以使用:

如果要确定它们是否为同一实例,由于参数是通过引用传递的,因此可以比较它们的地址:

template<typename T>
void call(T &m)
{
  if (&m == &m1)
    ...
}

> SeffeHey指向,您需要考虑如何在模板函数内提供比较对象,即M1或其地址,并且不清楚您的代码片段。

< P>改进所接受的答案,如果您希望避免由于函数调用被映射到除MAP以外的类型的编译器错误,您需要一个模板帮助器函数:

template <typename T, typename U>
bool is_equal(const T& t, const U& u)
{
    return false;
}

template <typename T>
bool is_equal(T& t, T& u)
{
    return &t == &u;
}

template<typename T>
void call(T &m)
{
  // Compare if m == m1
  if(is_equal(m, m1))
    std::cout << "Yes";
  else
    std::cout << "No";
}

如果调用函数使用其他类型的参数调用,那么第一个答案可能会导致编译器错误,我认为它一定在某个地方,否则将它声明为模板函数没有意义是的,我正在寻找第二个答案:@Smeeheey是的。关于这一点,我有同样的问题。相反,像这样的事情怎么样。模板void callT&m{如果void*&m==void*&m1…}
template <typename T, typename U>
bool is_equal(const T& t, const U& u)
{
    return false;
}

template <typename T>
bool is_equal(T& t, T& u)
{
    return &t == &u;
}

template<typename T>
void call(T &m)
{
  // Compare if m == m1
  if(is_equal(m, m1))
    std::cout << "Yes";
  else
    std::cout << "No";
}