I am trying to use a CRTPed base to hold some static initialization code like this:
template <typename T>
class InitCRTP
{
public:
static InitHelper<T> init;
};
template <typename T> InitHelper<T> InitCRTP<T>::init;
Now, any class which needs to do the work in InitHelper<T>
can do this:
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>`.
To force instantiation of InitCRTP<WantInit>::init
, I can either use dummy
or use the explicit instantiation as shown above. Is there a way of getting around this with doing neither? I would like users of this pattern to be able to simply inherit from InitCRTP<WantInit>
and not worry about anything else. If it helps, using C++11
is not an issue.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…