Не типовые аргументы шаблона функции по ссылке или по умолчанию? - PullRequest
0 голосов
/ 01 августа 2020

Должен ли я брать функции nttp по ссылке или по «значению» (неявный указатель)?

template< auto fn >
struct c
{
    static constexpr auto functor = fn;
};

vs

template< auto & fn >
struct c
{
    static constexpr auto functor = fn;
    static constexpr auto && functor = fn; // maybe?
};

Или это не имеет значения? Если это зависит от компилятора, пусть вопрос будет о MSV C

Использование:

c< GetLastError >::functor( );

1 Ответ

1 голос
/ 01 августа 2020

Вы передаете функцию в шаблон как аргумент шаблона, не являющийся типом. Он всегда будет относиться к одной и той же функции, потому что на самом деле это адрес функции. В этом случае auto подойдет.

Обычно люди используют auto для своих нужд, но вы можете использовать указатель или ссылку для ссылки на глобальные данные (например, переменные с областью видимости на уровне файла).

...