Указатель на метод из аргументов шаблона - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть проблема, я не знаю, как создать указатель на метод из аргументов шаблона

 /* Pointer to function */
template < typename controlledListType >
typedef void ( ControlingComponent::*ptrMethod ) ( std::list < std::weak_ptr< controlledListType > >,
                                                   std::weak_ptr< controlledListType >,
                                                   nlohmann::json );

/* Function to add a component which will be controlled  */
void addComponent ( std::weak_ptr< Component > _wp, ptrMethod _ptr );

Ошибка:

error: template declaration of ‘typedef’ in

typedef void ( ControlingComponent::*ptrMethod ) ( std::list < std::weak_ptr< controlledListType > >

error: ‘ptrMethod’ has not been declared

void addComponent ( std::weak_ptr< Component > _wp, ptrMethod _ptr );

Кто-нибудь знает, как решить мою проблему?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы не можете использовать typedef с шаблоном, язык не поддерживает это.Что вы можете сделать, это добавить объявление псевдонима , используя using оператор, такой как

template < typename controlledListType >
using ptrMethod = void (ControlingComponent::*) ( std::list < std::weak_ptr< controlledListType > >,
                                                  std::weak_ptr< controlledListType >,
                                                  nlohmann::json ); 

, и затем вы можете использовать его как

void addComponent ( std::weak_ptr< Component > _wp, ptrMethod<some_type> _ptr );
0 голосов
/ 26 ноября 2018

Шаблон typedef не вещь.Либо используйте using, либо укажите это в классе:

template < typename controlledListType >
using ptrMethod  = void (ControlingComponent::*) ( std::list < std::weak_ptr< controlledListType > >,
                                                   std::weak_ptr< controlledListType >,
                                                   nlohmann::json );

или

template < typename controlledListType >
struct some_name
{
    typedef void ( ControlingComponent::*ptrMethod ) ( std::list < std::weak_ptr< controlledListType > >,
                                                       std::weak_ptr< controlledListType >,
                                                       nlohmann::json );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...