【发布时间】:2021-12-02 07:44:47
【问题描述】:
是否可以确定运行时使用的数据类型?让我们考虑这样的示例代码:
void myFunction(type) {
new std::unordered_map<type, type> umap;
}
...
我知道我可以使用std::any 来支持多种类型,但我只是想知道有没有办法做到前者。
谢谢!
【问题讨论】:
-
您无法在运行时确定数据类型;所有类型在编译时都是固定的。您可以使用类型擦除技术使类型组看起来都相同(基类是最知名的,但
std::any和std::variant是实现此目的的其他方法)。类型擦除的最终形式是void*,但除非你还在它旁边传递一些东西,以便你的应用程序知道将它转换成什么,否则你不会单独使用它。 -
您可以将
myFunction()设为模板函数,其中type是模板参数,由传入函数的值类型推断。 -
要添加到@RemyLebeau 的答案,请看这里:Function template。
-
类型是编译时构造。
标签: c++ visual-c++ dynamic type-conversion runtime