c++ - 编译器如何转换 std::function?涉及运行时?
问题描述
我正在为我正在制作的一些不同的插件使用这种代码:
#include <iostream>
#include <functional>
template <class T>
struct SharedDataEngine {
T mSharedData;
std::function<void(T &destination)> mCopySharedData;
SharedDataEngine(std::function<void(T &destination)> copySharedData) : mCopySharedData(copySharedData) {
}
void storeSharedData() {
if (mCopySharedData != NULL) {
mCopySharedData(mSharedData);
}
}
};
struct Plugin {
float mPhase = 10.0f;
struct SharedData {
float mPhase;
};
SharedDataEngine<SharedData> mSharedDataEngine{[this](SharedData &destination) {
destination.mPhase = mPhase;
}};
};
int main() {
Plugin plugin;
std::cout << plugin.mSharedDataEngine.mSharedData.mPhase << std::endl;
plugin.mPhase = 20.0f;
plugin.mSharedDataEngine.storeSharedData();
std::cout << plugin.mSharedDataEngine.mSharedData.mPhase << std::endl;
}
它在运行时必须是软的,因为它以更高的采样率处理音频。我想确保带有 lambda 的功能不会涉及运行时“额外”处理。
因此,我很高兴了解编译器将如何mCopySharedData
在结构中翻译它。有机会获得一些花哨的伪代码/c++ 风格的代码吗?
看看它调用该函数后是否有任何“魔法”。我当然可以使用 Godbolt 并自己查看代码,但那是汇编,不是我真正的语言 :)
编辑:
我希望它会转化mCopySharedData(mSharedData)
为这样的东西:
mSharedData.mPhase = pointerToPlugin->mPhase;
这是对的吗?