【问题标题】:Interpreting complex C++ Definition [closed]解释复杂的 C++ 定义
【发布时间】:2019-08-14 22:58:09
【问题描述】:

对于最近的一个类项目,我们需要在 MIPS 模拟器中修改现有类方法中的代码。我成功地完成了作业,但困扰我的是我真的不明白方法声明:

template<class State, class Addr_t, bool Energy>
typename CacheAssoc<State, Addr_t, Energy>::Line
*CacheAssoc<State, Addr_t, Energy>::findLine2Replace(Addr_t addr, bool ignoreLocked)
{
    // ...
}

那里有很多东西。你能帮我分解一下吗?


Here is a link to the header

Here is a link to the code file

【问题讨论】:

  • 我认为您的意思是您希望帮助理解方法声明,而不是方法定义。定义是 {} 之间的所有内容。我说的对吗?
  • 你不明白什么?它是成员函数 CacheAssoc&lt;State, Addr_t, Energy&gt;::findLine2Replace 的模板,返回类型为 typename CacheAssoc&lt;State, Addr_t, Energy&gt;::Line *
  • Joakim,我真正问的问题是正确的。泰。

标签: c++ templates signature


【解决方案1】:

这是模板类CacheAssocfindLine2Replace 方法的定义(包括您省略的大括号内的所有内容)。

template<class State, class Addr_t, bool Energy>

这些是模板参数,前两个是类型模板参数,最后一个是布尔参数(只能是真或假)。这应该与类定义中显示的相同。

typename CacheAssoc<State, Addr_t, Energy>::Line*

这是函数返回类型。 typename 关键字是必需的,因为 CacheAssoc 是一个依赖类型(它依赖于未指定的模板参数)。 ::Line 必须是在 CacheAssoc 类中定义的类型。

CacheAssoc<State, Addr_t, Energy>::findLine2Replace(Addr_t addr, bool ignoreLocked)

是函数名和参数列表。如果您要在 CacheAssoc 类的范围内定义此方法,则不需要以下 CacheAssoc&lt;State, Addr_t, Energy&gt;::

【讨论】:

  • 曼苏尔。您的答案正是我希望寻找的信息。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2017-11-22
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多