Переменная массива указателей на функцию шаблона с выведенными аргументами - PullRequest
0 голосов
/ 16 января 2020

Я хотел бы использовать массив указателей на функции без указания типа указателя. Объявление это работает, но я не могу получить доступ к содержимому без передачи аргументов шаблона, что противоречит цели. Есть ли способ обойти это? Я использую C ++ 17.

std :: function работает в этом случае, но я бы хотел избежать его использования.

#include <functional>

bool f(int x);
bool g(int x);

static std::function<decltype(f)> fps[] {f, g};

template <typename T, typename... Args>
constexpr T (*fpsa[])(Args...) {f, g};

int main() {
    fps[0](1); // OK
    fpsa<bool,int>[0](1); // OK
    fpsa[0](1); // error: use of variable template 'fpsa' requires template arguments
}

1 Ответ

0 голосов
/ 16 января 2020

Я хотел бы использовать массив указателей на функции без указания типа указателя.

В этом случае вы можете использовать вывод аргумента шаблона класса с std::array:

constexpr auto fpsa = std::array{f, g};

Этого должно быть достаточно. Нет необходимости делать это переменной шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...