C++:引用/指向成员变量的指针作为模板参数

gma*_*dau 8 c++ templates reference member-variables

首先,我有这样的事情:

class Test {
    std::vector<int> a, b;
    void caller(...) { callee(...); }
    void callee(...) { /* Do stuff with 'a' */ }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是拥有一个与callee 矢量完全相同的功能b.要做到这一点,有两个明显的解决方案:

  • 传递矢量ab作为参数.但是,callee一个递归函数可以进行数百次调用,并将向量作为参数传递只是不必要的开销.
  • 复制函数callee和使用向量b,这将是最好的选择,尽管这callee是一个相当长的函数,我会有很多重复的代码.

出于好奇,我去寻找模板部分,我注意到可以用于

左值参考类型

指针类型

指向成员类型的指针

所以我试着这样做:

class Test {
    std::vector<int> a, b;
    void caller(...) { callee<a>(...); }
    template <std::vector<int> &x> void callee(...) { /* Do stuff with 'x' */ }
}
Run Code Online (Sandbox Code Playgroud)

但我明白了

错误:在常量表达式中使用'this'

有没有办法用引用或指针实现这个?

顺便说一句,我想要的东西可以被视为功能范围 #define

Que*_*tin 7

数组甚至元组,但不喜欢好老指针给成员?

class Test {
    std::vector<int> a, b;

    void caller(/*...*/) { callee<&Test::a>(/*...*/); }

    template <std::vector<int> Test::*vec>
    void callee(/*...*/) { /* Do stuff with `(this->*vec)` */ }
};
Run Code Online (Sandbox Code Playgroud)