【问题标题】:Exposing class member functions with deduced types使用推导类型公开类成员函数
【发布时间】:2015-08-27 14:39:28
【问题描述】:

我正在尝试编写一个接口类,其中用户以 DLL 的形式提供他们的实现。作为此接口的一部分,有一些成员函数返回在运行时确定的推导类型,例如:

auto someFunction(int x) -> decltype(auto)

我无法公开这些功能以供客户端应用程序使用。我试图对这个问题进行一些研究,似乎最流行的导出成员函数的解决方案是将它们声明为虚拟以利用 vtable。我尝试了这种方法,但得到一个错误“虚函数不能有推导的返回类型”。有没有 vtable 方法的替代方案?

谢谢。

【问题讨论】:

  • 没有在运行时确定的类型。类型推导发生在编译期间。
  • @molbdnilo 感谢您的回复。我基本上试图拥有一个返回一些数据值但能够返回任何类型的函数。该函数将从 DLL 加载,返回类型将取决于该 DLL 中的函数实现。这种行为不可能吗?
  • 能否更详细地解释您想要实现的目标?可以举个例子吗?

标签: c++ dll auto decltype


【解决方案1】:

您尝试做的事情是不可能的。虚函数不能是模板(在这种情况下,您可以将 auto 视为模板)。原因是所有类型推导都发生在编译时,因为在 C++ 中运行时没有类型信息。并且虚函数解析发生在编译时。您正在寻找的技术(不是灵丹妙药,但有时适用)称为类型省略。

【讨论】:

  • 感谢您的回答。我想模板函数不能是虚拟的是有道理的。我现在意识到 C++ 根本不允许运行时键入。我想我可能误解了新的 C++ 关键字“auto”和“decltype”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多