auto foo (...) -> decltype (this) Есть ли обходной путь? - PullRequest
3 голосов
/ 17 января 2012

У меня есть следующий класс и я пытаюсь объявить функцию-член, которая будет возвращать указатель на этот тип, но следующий код

template<class Key, int b> class b_plus_tree_inner_node {
  auto split() -> decltype(this) {}
};

выдаст мне такую ​​ошибку

недопустимое использование 'это 'на верхнем уровне

Могу ли я сделать это по-другому, я теперь о существовании typedef, но может быть это возможно с decltype?

РЕДАКТИРОВАНИЕ:

Я хочу сделать это:

b_plus_tree_inner_node<Key, b>* split() {...}

Ответы [ 2 ]

5 голосов
/ 17 января 2012

Если вы хотите, чтобы функция member объявила ее внутри класса:

template<class Key, int b> class b_plus_tree_inner_node {
   b_plus_tree_inner_node* split(){}
   // also valid:
   //b_plus_tree_inner_node<Key, b>* split(){}
};

Если вы хотите функцию non-member , сделайте ее шаблоном:

template<class Key, int b>
b_plus_tree_inner_node<Key, b>* split(){}

Стандарт позволяет писать auto split() -> decltype(this) {}, но GCC 4.6 пока не поддерживает его (транк GCC 4.7 поддерживает).

0 голосов
/ 17 января 2012

Вы, вероятно, хотите это:

template<class Key, int b> 
class b_plus_tree_inner_node 
{        
     b_plus_tree_inner_node<Key, b> split() 
     { 
          return /*...*/;
     }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...