使用可变模板向成员传递指针

Passing pointers to members with a variadic template

本文关键字:成员 指针      更新时间:2023-10-16

考虑以下代码:

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:请参阅实际示例。

是否可以让func接受多个指向具有可变模板的A成员的指针?

我的第一个想法是:

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

但它不编译。

尝试

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