Здравствуйте, adb, Вы писали:
adb>Есть ли какой-нибудь универсальный метод сделать нужное без макросов и лишних If?
похоже, вам нужно что-то типа lazy. В шарпе он есть, в С++ нет, но можно сделать самому.
template<typename T>
struct lazy {
using Func = std::function<T()>;
lazy(Func&& f) : funcOrVal { std::move(f) } {}
operator T() {
if(funcOrVal.index() == 0){
funcOrVal = std::get<Func>(funcOrVal)();
}
return std::get<T>(funcOrVal);
}
private:
std::variant<Func, T> funcOrVal;
};
но тогда надо принимать lazy везде, где вы принимаете QString. Ну и принимать все риски отложенных вычислений.