有没有办法从作为函数参数的模板var中获取value_type?

Pos*_*ron 3 c++ templates

我正在写一个虚方法,其参数之一是a std::vector。在内部,我使用std::unordered_set与相同value_type的样式std::vector

但是,我可以改变value_typestd::vector,我不希望每次更改里面的代码类型。为了更好地理解我在说什么(英语不是我的母语),请参见下面的代码。

run(std::vector<Node> &data) {
    std::unordered_set<Node> var;
}
Run Code Online (Sandbox Code Playgroud)

我期望的是这样的事情:

run(std::vector<Node> &data) {
    std::unordered_set<data::value_type> var;
}
Run Code Online (Sandbox Code Playgroud)

而且,当然,它不起作用。先感谢您。

编辑:非常感谢您的答案,尤其是这个答案:https : //stackoverflow.com/a/56563062/11203604

函数模板的答案是不可能的:它是一个重载的函数(虚拟)。至于类模板,由于将来工作中的技术原因,我不能将其作为模板,因为它可能是公共类。

谢谢。

Nat*_*ica 5

您可以使用decltype获取的类型,data然后应用于该类型::value_type。那会给你

std::unordered_set<std::remove_reference_t<decltype(data)>::value_type> var;
Run Code Online (Sandbox Code Playgroud)

如注释中指出的Evg,这std::remove_reference_t是必需的,因为data它是引用,并且您不能将范围解析运算符应用于引用类型。