Я использую этот вид кода для некоторых различных плагинов, которые я делаю:
#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;
}
Он должен быть мягким во время выполнения, так как он имеет дело со звуком на более высокой выборке -тарифы. Я хотел бы убедиться, что функциональные w / lambdas не будут включать «дополнительную» обработку во время выполнения.
Таким образом, мне было бы приятно понять, как компилятор будет переводить это mCopySharedData
в структурах. Есть ли шанс получить какой-нибудь причудливый псевдокод / код в стиле c ++?
Чтобы узнать, нет ли каких-либо "magi c", когда он вызывает эту функцию. Конечно, я мог бы использовать Godbolt и увидеть сам код, но это ассемблер, не совсем мой язык:)
РЕДАКТИРОВАТЬ: Я буду sh это переведет mCopySharedData(mSharedData)
в что-то вроде этого:
mSharedData.mPhase = pointerToPlugin->mPhase;
Это правильно?