相关疑难解决方法(0)

尾随返回类型,decltype和const-ness

我正在试验新的尾随返回类型,我遇到了这个(简化的)代码的问题

#include <list>

class MyContainer{
  std::list<int> ints;

  auto begin( ) -> decltype(ints.begin())
  {
    return ints.begin();
  }

  auto begin( ) const -> decltype(ints.begin())
  {
    return ints.begin();
  }
};
Run Code Online (Sandbox Code Playgroud)

忽略这段代码毫无意义的事实.重要的部分是使用GCC 4.6.1(带-std=c++0x标志)时生成的编译器错误:

In member function 'std::list<int>::iterator MyContainer::begin() const':
error: could not convert '((const MyContainer*)this)->MyContainer::ints.std::list<_Tp, _Alloc>::begin [with _Tp = int, _Alloc = std::allocator<int>, std::list<_Tp, _Alloc>::const_iterator = std::_List_const_iterator<int>]()' from 'std::list<int>::const_iterator {aka std::_List_const_iterator<int>}' to 'std::list<int>::iterator {aka std::_List_iterator<int>}'
Run Code Online (Sandbox Code Playgroud)

如果你是涉及模板错误的风扇不中,短篇小说的是,在的身体const的版本MyContainer::begin,则表达式ints.begin()返回类型的值std::list<int>::const_iterator(因为intsconst在这样的情况下).但是,decltype(ints.begin())生成类型std::list<int>::iterator,即在决定表达式的类型时 …

c++ const-correctness decltype c++11 trailing-return-type

16
推荐指数
1
解决办法
2275
查看次数

auto foo(...) - > decltype(this)有一些解决方法吗?

我有下一个类,并尝试声明成员函数,它将返回指向该类型但下一个代码的指针

template<class Key, int b> class b_plus_tree_inner_node {
  auto split() -> decltype(this) {}
};
Run Code Online (Sandbox Code Playgroud)

给了我这样的错误

在顶层无效使用'this'

我可以用另一种方式做到这一点,我现在关于typedef的存在,但是它可能与decltype有关吗?

编辑:

我想完成这个:

b_plus_tree_inner_node<Key, b>* split() {...}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

3
推荐指数
1
解决办法
946
查看次数