首页 > 解决方案 > 使用可变参数模板传递指向成员的指针

问题描述

考虑下面的代码:

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);

但它不编译。

编辑1

使用 MSVC 2017 我得到:错误 C2988:无法识别的模板声明/定义

使用 Clang:查看实时示例

标签: c++c++17

解决方案


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

我的第一个想法是这样的:

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

但它不编译。

尝试

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

推荐阅读