CRTP和template模板参数限制
CRTP and template template parameters limitation
我正在尝试使用 CRTP,但我对以下代码无法编译的原因感到困惑。
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX>
{
// This does NOT compile
};
template<template<class...> class CBase>
struct ComponentY : public CBase<int>
{
// This does compile
};
你知道在CRTP的情况下模板模板参数是否有一些限制吗?
一个class模板名称代表"current specialization"(即它是一个注入的class名称)仅在class的{
开头之后模板定义,在其范围内。在此之前,它是一个模板名称。
所以 CBase<ComponentX>
是尝试将模板作为参数传递给 CBase
,它需要一组类型。
修复相当简单:
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX<CBase>> // Specify the arguments
{
// This should compile now
};
ComponentX<CBase>
是您希望作为类型参数提供的专业名称。
我正在尝试使用 CRTP,但我对以下代码无法编译的原因感到困惑。
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX>
{
// This does NOT compile
};
template<template<class...> class CBase>
struct ComponentY : public CBase<int>
{
// This does compile
};
你知道在CRTP的情况下模板模板参数是否有一些限制吗?
一个class模板名称代表"current specialization"(即它是一个注入的class名称)仅在class的{
开头之后模板定义,在其范围内。在此之前,它是一个模板名称。
所以 CBase<ComponentX>
是尝试将模板作为参数传递给 CBase
,它需要一组类型。
修复相当简单:
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX<CBase>> // Specify the arguments
{
// This should compile now
};
ComponentX<CBase>
是您希望作为类型参数提供的专业名称。