【问题标题】:Dynamic type in C++C++中的动态类型
【发布时间】:2021-12-02 07:44:47
【问题描述】:

是否可以确定运行时使用的数据类型?让我们考虑这样的示例代码:

void myFunction(type) {

    new std::unordered_map<type, type> umap;
}
...

我知道我可以使用std::any 来支持多种类型,但我只是想知道有没有办法做到前者。

谢谢!

【问题讨论】:

  • 您无法在运行时确定数据类型;所有类型在编译时都是固定的。您可以使用类型擦除技术使类型组看起来都相同(基类是最知名的,但std::anystd::variant 是实现此目的的其他方法)。类型擦除的最终形式是void*,但除非你还在它旁边传递一些东西,以便你的应用程序知道将它转换成什么,否则你不会单独使用它。
  • 您可以将myFunction() 设为模板函数,其中type 是模板参数,由传入函数的值类型推断。
  • 要添加到@RemyLebeau 的答案,请看这里:Function template
  • 类型是编译时构造。

标签: c++ visual-c++ dynamic type-conversion runtime


【解决方案1】:

是的,您可以使用templates with C++,例如:

template<typename genericType>
void myFunction(genericType variable) {
   unordered_map<genericType, genericType> umap;
}

ps:我认为您不需要在此处使用 new 关键字。

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2010-11-23
    • 2010-12-24
    • 2015-12-19
    相关资源
    最近更新 更多