我正在写一个虚方法,其参数之一是a std::vector
。在内部,我使用std::unordered_set
与相同value_type
的样式std::vector
。
但是,我可以改变value_type
的std::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
函数模板的答案是不可能的:它是一个重载的函数(虚拟)。至于类模板,由于将来工作中的技术原因,我不能将其作为模板,因为它可能是公共类。
谢谢。
您可以使用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
它是引用,并且您不能将范围解析运算符应用于引用类型。
归档时间: |
|
查看次数: |
48 次 |
最近记录: |