私の質問は、C ++の関数ラッパーへのインライン最適化の適用に関するものです。次のコードを検討してください。WorkerStructureオブジェクトは、機能の一部をカプセル化する関数ラッパーで初期化されます。関数ラッパーは、WorkerStructure::doSomeWorkメソッドが呼び出されたときに使用されます。
WorkerStructure :: doSomeWorkメソッドに適用すると、workerFunctionオブジェクトによってカプセル化された機能はインライン化されますか?明らかに、機能が他の変換ユニットで定義されている場合、workerFunctionオブジェクトは関数ポインターのみをカプセル化しますが、インライン化が行われる他の状況はありますか?不可能ですか?
別の変換単位で定義されたラムダ関数が関数ラッパーを介して渡される場合、それは関数ポインターを渡すことと実質的に同等ですか?
struct WorkerStructure
{
WorkerStructure(std::function <bool(float)> &f):workerFunction(f) {}
void doSomeWork(float inputValue)
{
if(workerFunction(inputValue))
{
//do some conditional operation
}
}
std::function <bool(float)> workerFunction ;
};