我有一个在标准容器上运行的 X 类。以 value_type 作为参数的函数必须调用以 key_type 作为参数的函数。我怎么做?我看起来很基础。
template<typename C>
class X
{
void foo(typename C::value_type vt)
{
bar(vt.first); // this works for C = std::map
bar(vt); // this works for C = std::set
}
void bar(typename C::key_type kt)
{
...
}
};
最佳答案
添加一个 (private
) bar
重载,它是一个函数模板并以 T::value_type
作为参数。
template<typename C>
class X
{
public:
void foo(typename C::value_type vt)
{
bar(vt);
}
void bar(typename C::key_type kt)
{}
private:
template<typename T = C>
void bar(typename T::value_type kt)
{
bar(kt.first);
}
};
当 C
是一个 std::map
时,对 foo
中的 bar
的调用将解析为成员函数模板,然后它将使用正确的参数调用其他 bar
。
当 C
是一个 std::set
时,对 bar
的调用将同时匹配 bar
重载, 但由于一个是成员函数模板,而另一个不是,因此后者将被认为是更好的匹配。
关于c++ - 从 value_type 获取 key_type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24905553/