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.要做到这一点,有两个明显的解决方案:
a或b作为参数.但是,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
数组甚至元组,但不喜欢好老指针给成员?
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)
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |