我有以下地图
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
中的哪一个。
答案 0 :(得分:3)
如果您想根据地图内容进行检查,可以使用operator==
:
template<typename T>
void call(T &m)
{
if (m == m1)
...
}
如果您想确定他们是否是同一个实例,因为参数是通过引用传递的,您可以比较他们的地址:
template<typename T>
void call(T &m)
{
if (&m == &m1)
...
}
正如@Smeeheey指出的那样,你需要考虑如何在模板函数中提供比较对象(即m1
或其地址),并且从你的片段中不清楚。
答案 1 :(得分:1)
要改进已接受的答案,如果要避免因call
以外的类型调用函数map<int, string>
而导致编译器错误,则需要模板帮助函数:
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";
}