【发布时间】:2013-12-10 01:45:38
【问题描述】:
我正在尝试实现以下类:
template <typename Container>
class reverse_adaptor
{
public: // Construction
reverse_adaptor(Container &container) :
m_container(container)
{}
public: // STL container static polymorphism
auto begin() const -> decltype(m_container.rbegin())
{
return m_container.rbegin();
}
auto end() const -> decltype(m_container.rend())
{
return m_container.rend();
}
private: // Members
Container &m_container;
};
我使用尾随返回类型的原因是因为我不知道 m_container 是否为 const,所以我让编译器为我解决。但是,我收到以下编译器错误:
/Users/mark/Blah/Stdx.h:77:40: 没有名为“m_container”的成员 'stdx::reverse_adaptor > >'
我认为可能与模板类型的多阶段传递有关,因此将其更改为decltype(this->m_container.rbegin()),但这也不起作用。
我怎样才能让它工作?
【问题讨论】:
-
嗯,请稍等一下 decltype(auto),不要打扰^^。
-
您是否尝试过使用
std::declval而不是直接在decltype表达式中使用成员?那应该解决它。不是答案,因为我不知道这是标准要求还是您的工具链存在问题 -
begin和end需要知道m_container,需要在他们之前声明。
标签: c++ c++11 trailing-return-type