这是我想要创建的内容:
active
这是棘手的部分:
class Theme
{
public:
Theme();
bool isValid() const;
QString name() const;
private:
QString m_name;
};
class ThemeManager
{
public:
ThemeManager();
~ThemeManager();
void setCurrentTheme(const Theme& theme);
const Theme& currentTheme() const;
const Theme& theme(const QString& name) const;
private:
Theme& m_currentTheme;
QSet<Theme> m_availableThemes;
};
这就是我想要实现的目标:
const Theme& ThemeManager::theme(const QString& name) const
{
for (const Theme& theme : m_availableThemes)
{
if (name == theme.name())
{
return theme;
}
}
return Theme();
}
ThemeManager m;
const Theme& t = theme("monokai");
if (t.isValid()) {
// Theme is valid
} else {
// Theme is not valid
}
保留主题列表和对当前主题的引用。我想使用引用而不是指针。现在,如果要求的主题不存在于经理的主题列表中,我想返回对我可以使用ThemeManagers
测试的无效主题的引用。我不想使用单独的成员,例如Theme::isValid
仅用于此目的。
我的问题是:是否有办法将临时对象移到Theme m_invalidTheme;
范围之外?那么来自ThemeManager::theme
的{{1}}不是一个破坏代码的悬空参考?