まず、次のようなものがあります。
class Test {
std::vector<int> a, b;
void caller(...) { callee(...); }
void callee(...) { /* Do stuff with 'a' */ }
}
私が欲しかったのはcallee
、 vectorとまったく同じ機能を持つことb
です。これを行うには、2 つの明白な解決策があります。
- ベクトル
a
またはb
引数として渡します。ただし、callee
何百もの呼び出しに使用できる再帰関数であり、ベクトルを引数として渡すと、不要なオーバーヘッドになります。 - 関数をコピーして
callee
vector を使用します。これは非常に長い関数であり、多くの重複コードがあるb
にもかかわらず、最良の代替手段です。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