【问题标题】:Resolving template member function overload解决模板成员函数重载
【发布时间】:2020-02-06 12:03:02
【问题描述】:

我正在尝试编写继承自T 的模板类并正确实现其中的一部分,我需要知道T 使用的数据类型是什么。幸运的是,所有对 T 的有效替换都有成员方法 GetOutput,它返回预期的数据类型。但是,该方法有两个重载:GetOutput()GetOutput(int)。我试图使用this answer 提取类型,但未能使重载解析工作:

using OutputType = typename std::result_of<decltype(&T::GetOutput)(T)>::type;

我正在尝试的方法是否可行,如果可以,到达那里的正确方法是什么?

【问题讨论】:

  • GetOutput(int)decltype(&T::GetOutput)(T)。如果您期望int,为什么要通过T

标签: c++ templates c++14


【解决方案1】:

如果GetOutput 的两个重载返回相同的类型,您可以只选择其中一个并使用它的返回类型:

using OutputType = decltype(std::declval<T&>().GetOutput());

【讨论】:

  • 可能值得注意的是,std::result_of 在 C++17 中已被弃用并在 C++20 中被删除
  • 完美,我没想到。还要感谢@idclev463035818 指出这条信息。
猜你喜欢
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
相关资源
最近更新 更多