我可以不写出完整的 return 类型名称吗?

Can I somehow not write out the full qualified return type name?

我有以下嵌套 class 的情况:

class PS_OcTree {
public:
  // stuff ...

private:
  struct subdiv_criteria : public octree_type::subdiv_criteria {
    PS_OcTree* tree;
    subdiv_criteria(PS_OcTree* _tree) : tree(_tree) { }
    virtual Element elementInfo(unsigned int const& elem, node const* n) override;
  };
};

为了在.cpp文件中实现这个方法,我写

PS_OcTree::subdiv_criteria::Element
PS_OcTree::subdiv_criteria::elementInfo(
  unsigned int const& poly_index, node const* n)
{
    // implementation goes here
}

我写方法的全名没问题,但是我真的还需要写return类型的全名吗?在参数括号和函数体内,我可以访问 subdiv_criteria class 的名称,但这似乎不适用于 return 类型。

最好是这样写

Element PS_OcTree::subdiv_criteria::elementInfo(
  unsigned int const& poly_index, node const* n)
{
    // implementation goes here
}

// or

auto PS_OcTree::subdiv_criteria::elementInfo(
  unsigned int const& poly_index, node const* n)
{
    // implementation goes here
}

至少不需要我在 return 类型中重复 PS_OcTree::subdiv_criteria 的内容。 C++11 中有什么我可以使用的吗?它也应该适用于 MSVC 2015 和 Clang 5。

Class-scope 查找适用于 declarator-id 之后的任何内容(这是被定义的函数的名称,即 PS_OcTree::subdiv_criteria::elementInfo) ,包括尾随 return 类型。因此,

auto PS_OcTree::subdiv_criteria::elementInfo(
  unsigned int const& poly_index, node const* n) -> Element 
{
}