Как передать указатель на функцию в качестве параметра шаблона класса? - PullRequest
0 голосов
/ 12 марта 2020

Я объявил шаблон класса:

template <typename DeallocFunction, typename CryptoObject>
class CryptoDeallocator
{
    uint32_t (*DeallocFunc)(CryptoObject*);
    CryptoObject *ObjectToDealloc;
public:
    CryptoDeallocator(DeallocFunction i_p_func, CryptoObject *i_st_CryptoObject)
    {
        DeallocFunc = i_p_func;
        ObjectToDealloc = i_st_CryptoObject;
    }
    ~CryptoDeallocator()
    {
        if ((ObjectToDealloc != NULL) && (DeallocFunc != NULL))
        {
            DeallocFunc(ObjectToDealloc);
        }
    }
};

В другом месте моего кода определена функция со следующим прототипом:

uint32_t nrf_crypto_ecc_private_key_free(nrf_crypto_ecc_private_key_t * p_private_key);

Я пытаюсь создать экземпляр моего класса CryptoDeallocator, используя:

nrf_crypto_ecc_private_key_t st_OwnPrivateKey;
CryptoDeallocator<uint32_t(*nrf_crypto_ecc_private_key_free)(nrf_crypto_ecc_private_key_t*), nrf_crypto_ecc_private_key_t> st_CryptoDeallocator(nrf_crypto_ecc_private_key_free, &st_OwnPrivateKey);

, но я получаю ошибку компиляции в IAR: Ошибка [Pe018]: ожидается ")".

Какой правильный синтаксис я должен использовать для создания экземпляра объекта класса CryptoDeallocator?

1 Ответ

0 голосов
/ 12 марта 2020

При создании экземпляра класса используйте спецификатор decltype:

CryptoDeallocator<decltype(nrf_crypto_ecc_private_key_free), nrf_crypto_ecc_private_key_t> st_CryptoDeallocator(nrf_crypto_ecc_private_key_free, &st_OwnPrivateKey);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...