gpt4 book ai didi

c++ - 使用 CRTP 强制显式模板实例化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:57 25 4
gpt4 key购买 nike

我正在尝试使用 CRTPed 基础来保存一些静态初始化代码,如下所示:

template <typename T>
class InitCRTP
{
public:
static InitHelper<T> init;
};

template <typename T> InitHelper<T> InitCRTP<T>::init;

现在,任何需要在 InitHelper<T> 中完成工作的类可以这样做:

class WantInit : public InitCRTP<WantInit>
{
public:
void dummy(){init;}//To force instantiation of init
};
template class InitCRTP<WantInit>;//Forcing instantiation of init through explicit instantiation of `InitCRTP<WantInit>`.

强制实例化InitCRTP<WantInit>::init , 我可以使用 dummy或使用如上所示的显式实例化。有什么办法可以解决这个问题吗?我希望这种模式的用户能够简单地继承自 InitCRTP<WantInit>不用担心其他任何事情。如果有帮助,请使用 C++11不是问题。

最佳答案

您可以将变量作为引用模板参数传递。然后需要导致实例化的对象

template <typename T, T /*unnamed*/>
struct NonTypeParameter { };

template <typename T>
class InitCRTP
{
public:
static InitHelper init;
typedef NonTypeParameter<InitHelper&, init> object_user_dummy;
};

关于c++ - 使用 CRTP 强制显式模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725152/

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