私が次のようなクラスを持っているとしましょう
class Empty{
Empty(int a){ cout << a; }
}
そして、私はそれを使用してそれを呼び出します
int main(){
Empty(2);
return 0;
}
これにより、「空の」オブジェクトを作成するためにスタックにメモリが割り当てられますか?明らかに、引数はスタックにプッシュする必要がありますが、余分なオーバーヘッドは発生しません。基本的に私はコンストラクターを静的メンバーとして使用しています。
私がこれをしたい理由はテンプレートのためです。実際のコードは次のようになります
template <int which>
class FuncName{
template <class T>
FuncName(const T &value){
if(which == 1){
// specific behavior
}else if(which == 2){
// other specific behavior
}
}
};
これで私は次のようなものを書くことができます
int main(){
int a = 1;
FuncName<1>(a);
}
のタイプを指定する必要がなく、1つのテンプレートパラメータを特殊化できるようにしますT
。また、コンパイラーがコンストラクター内の他のブランチを最適化することを望んでいます。これが本当かどうか、またはチェックする方法を誰かが知っているなら、それは大いにありがたいです。また、テンプレートをその状況に投げても、「空のクラス」の問題は上から変わらないと思いましたよね?