Передача указателей членам с вариационным шаблоном - PullRequest
1 голос
/ 22 октября 2019

Рассмотрим приведенный ниже код:

struct A {int x; bool y; double z;};

template <class T>
void func(T A::*fieldPtr) {}

int main() { func(&A::x); }

Можно ли заставить func принимать несколько указателей на A членов с переменными шаблонами? Таким образом, его можно использовать следующим образом:

func(&A::x, &A::y);
func(&A::x, &A::y, &A::z);
...

Моя первая идея была такой:

    template <class... Args>
    void func(Args... A::*fieldPtr);

, но она не компилируется.

EDIT1

С MSVC 2017 я получаю: ошибка C2988: неузнаваемое объявление / определение шаблона

С Clang: см. живой пример .

1 Ответ

0 голосов
/ 22 октября 2019

Можно ли заставить func принимать несколько указателей на членов A с переменными шаблонами?

Моя первая идея была такой:

 template <class... Args>
 void func(Args... A::*fieldPtr);

, но она не компилируется.

Попробуйте с

template <class ... Ts>
void func(Ts A::*...fieldPtr) { /* do something with fieldPtr... */ }
// ..............^^^
...