gpt4 book ai didi

c++ - 模板类成员的初始化可以委托(delegate)给客户端吗?

转载 作者:行者123 更新时间:2023-11-30 02:45:24 25 4
gpt4 key购买 nike

我遇到了以下问题:如何初始化包含作为模板参数提供的对象的静态代理。

这是我的代码片段,显示了这种情况:

template<class SharedState>
class TToolbar : public ImplCustomToolBar
{
public:
virtual const ICustomToolbarsSharedState* const GetSharedState() const { return &sharedState_.Get();}

private:
// intent: static constructor for static SharedState initialization
class SharedStateHolder
{
public:
SharedStateHolder()
{
ToolbarsSharedState_.Initialize();
}
const SharedState& Get() const { return ToolbarsSharedState_;}
private:
SharedState ToolbarsSharedState_;
};
static SharedStateHolder sharedState_;
};

// I need TToolbar::SharedStateHolder sharedState_;

由于不知道将提供什么模板参数,我不能使用模板的显式特化来进行静态成员初始化。

所以我找到的唯一解决方案是:TToolbar 的客户端应该自己进行初始化。但我认为这是容易出错的解决方案。

问题:我的解决方案有哪些弱点,处理这种情况的正确方法是什么?

最佳答案

可以使用成员函数的静态局部变量:

template<class SharedState>
class TToolbar : public ImplCustomToolBar
{
virtual const ICustomToolbarsSharedState* const GetSharedState() const
{
static SharedStateHolder sharedState_;
return &sharedState_.Get();
}
};

编译器负责确保静态是唯一的。

或者,如果想要摆脱 Holder 类:

template<class SharedState>
class TToolbar : public ImplCustomToolBar
{
virtual const ICustomToolbarsSharedState* const GetSharedState() const
{
static SharedState sharedState_;
static bool initialized = false;
if (!initialized)
{
sharedState_.Initialize();
initalized = true;
}
return &sharedState_;
}
};

关于c++ - 模板类成员的初始化可以委托(delegate)给客户端吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24466398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com