Сохранение аргументов шаблона указателя функции - PullRequest
0 голосов
/ 12 октября 2018

Обычно я сохраняю аргументы функции примерно так:

template<typename T>
struct foo {
    using type = T;
};

Я знаю, что это не будет using, но каким образом я могу сохранить функцию, переданную в качестве параметра шаблона?

template<void (*T)(const int)>
struct bar {
    static T& type = T;
};

Я знаю, что это не работает, я просто хочу знать, как я могу выполнить операцию сохранения этого указателя функции.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы можете использовать decltype, чтобы объявить переменную-член типа T, на которую могут ссылаться люди, например

template<void (*T)(const int)>
struct bar {
    static constexpr decltype(T) value = T;
};

Вы можете сделать еще один шаг и сделать тип T член, а также

template<void (*T)(const int)>
struct bar {
    using fptr = decltype(T)
    static constexpr fptr value = T;
};
0 голосов
/ 12 октября 2018

При использовании так:

template<void (*T)(const int)>
struct bar {
    static T& type = T;
};

T - это шаблонный тип, не относящийся к типу, и тип для сохранения не существует (я бы также предложил другое имя для него, поскольку T обычно ссылается на тип)

Вы можете сделать сам указатель доступным в качестве члена структуры, например

static constexpr int (*func_ptr)(int) = T;
...