長いメンバ関数を分割したい場合、分割した関数をクラスのヘッダに記述しなければなりません。
コード:
// test.hpp
class TEST {
public:
void func();
};
// test.cpp
void TEST::func(){
// 長い関数
}
↓funcを内部的に分割する
コード:
// test.hpp
class TEST {
public:
void func();
private:
void funcA();
void funcB();
void funcC();
};
// test.cpp
void TEST::funcA(){}
void TEST::funcB(){}
void TEST::funcC(){}
void TEST::func(){
funcA();
funcB();
funcC();
}
funcA,funcB,funcCはtest.cppでしか使用しないとした場合、test.hppに宣言しないで済ませる方法はありますでしょうか?ファイルローカルなのにいちいちヘッダに書くのが面倒くさいのと存在そのものを隠蔽したいという気持ちがあります。
意味的には下記のラムダ式のような感じですが、関数内で定義するためインデントが深くなりあまり好きではありません。
コード:
void TEST::func(){
auto funcA = [&]{};
auto funcB = [&]{};
auto funcC = [&]{};
funcA();
funcB();
funcC();
}
また、これの欠点は下記のとおりです。
①先に定義したfuncAからは後に定義したfuncBやfuncCを呼べない
②publicのfunc2()やfunc3()をtest.cppに新設した場合に共有で使えない
言語仕様上無理かなとも思ってますが何か方法があれば。
なおマクロ(define)は避けたいです。