首先,我有這樣的事情:C++:參考/指針成員變量作爲模板參數
class Test {
std::vector<int> a, b;
void caller(...) { callee(...); }
void callee(...) { /* Do stuff with 'a' */ }
}
我想什麼是有不完全一樣callee
但對於矢量b
功能。要做到這一點有兩個明顯的解決方案:
- 傳遞矢量
a
或b
作爲參數。但是,callee
是一個可以進行數百次調用的遞歸函數,並且將向量作爲參數傳遞僅僅是不必要的開銷。 - 複製功能
callee
並使用向量b
,這將是最好的選擇,儘管事實上callee
是一個相當長的功能,我會有很多重複的代碼。
出於好奇,我去尋找模板的一部分,我注意到,可用於
lvalue reference type
pointer type
pointer to member type
於是,我就這樣做:
class Test {
std::vector<int> a, b;
void caller(...) { callee<a>(...); }
template <std::vector<int> &x> void callee(...) { /* Do stuff with 'x' */ }
}
,但我得到
error: use of ‘this’ in a constant expression
有沒有什麼辦法可以通過參照還是一個指針?
順便說一句,我想要的東西可以被看作是一個功能範圍的#define
「並將向量作爲參數傳遞只是不必要的開銷」我不相信當您通過引用或指針傳遞向量時,您甚至不會注意到「開銷」。 –
嗯,是的。但我更願意選擇第二種解決方案,而且根本沒有任何開銷。 – gmardau
如果你想限制性地使用這樣的模板,你會想'template',並且無論你使用哪種類型,接受一個'T&' - 如果你特別需要防止它被用於說'std: :vector '然後使用'std :: enable_if'進行不匹配。 –
Olipro