Ошибки шаблона C ++ - PullRequest
       1

Ошибки шаблона C ++

0 голосов
/ 06 сентября 2011

Я пробую реализацию простой системы свойств для C ++, которую я нашел здесь .

Но код не скомпилируется.* Я получаю несколько ошибок в самой первой строке.Я использую Xcode 4 и ни LLVM 2.1, ни GCC 4.2 не могут скомпилировать это.В чем проблема?

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Указатель на функцию-член МОЖЕТ быть параметром шаблона, но в этом случае не следует указывать typename перед:

template <class T, class Object, T (Object::*real_getter)()>

Другая ошибка - вызов:

(my_object->real_getter)()

который должен быть:

(my_object->*real_getter)()
0 голосов
/ 06 сентября 2011

Список параметров шаблона не работает так. Параметры шаблона должны быть одним из следующих: имена типов, типы (с ограничениями) или шаблоны.

Может быть, вы хотите иметь тип по умолчанию, например?

template <class T,
          class Object,
          typename U = T (Object::*real_getter)()>
class ...

Здесь U по умолчанию - указатель на функцию-член, но вы должны предоставить полную подпись, включая тип возвращаемого значения.

Или вы хотите, чтобы real_getter был членом typedef?

template <class T, class Object>
class ReadOnlyProperty
{
  typedef typename  T (Object::*real_getter)();
  //...
};

Или, как подсказывает @jmihalicza, вам нужен параметр значения типа T (Object::*)()?

template <class T, class Object, T (Object::*real_getter)()>
class ReadOnlyProperty
{ //...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...