首先,我有这样的事情:
class Test {
std::vector<int> a, b;
void caller(...) { callee(...); }
void callee(...) { /* Do stuff with 'a' */ }
}
callee
我想要的是有一个与vector完全相同的功能b
。为此,有两个明显的解决方案:
- 传递向量
a
或b
作为参数。但是,callee
它是一个递归函数,可以进行数百次调用,并且将向量作为参数传递只是不必要的开销。 - 复制函数
callee
并使用 vectorb
,这将是最好的选择,尽管这callee
是一个相当长的函数并且我会有很多重复的代码。
出于好奇,我去寻找模板部分,我注意到它可以用于
左值引用类型
指针类型
指向成员类型的指针
所以我试着这样做:
class Test {
std::vector<int> a, b;
void caller(...) { callee<a>(...); }
template <std::vector<int> &x> void callee(...) { /* Do stuff with 'x' */ }
}
但我明白了
错误:在常量表达式中使用“this”
有没有办法通过引用或指针来实现这一点?
顺便说一句,我想要的可以看作是函数范围的#define