C++ 跨模板专门化共享的静态成员
给定以下类模板,是否有任何方法使字段C++ 跨模板专门化共享的静态成员,c++,templates,c++11,C++,Templates,C++11,给定以下类模板,是否有任何方法使字段a在所有专业中都相同(即a::a与a::a的左值相同) 模板 甲级决赛{ 私人: 静态int a; }; 只需(私下)从非模板继承并将静态文件移动到那里: class ABase { protected: static int a; }; int ABase::a; template<class T> class A final : private ABase { }; class-ABase{ 受保护的: 静态int a; };
a
在所有专业中都相同(即a::a
与a::a
的左值相同)
模板
甲级决赛{
私人:
静态int a;
};
只需(私下)从非模板继承并将静态文件移动到那里:
class ABase {
protected:
static int a;
};
int ABase::a;
template<class T>
class A final : private ABase
{ };
class-ABase{
受保护的:
静态int a;
};
内基::a;
模板
甲级决赛:私人阿巴斯
{ };
只需(私下)从非模板继承并将静态文件移动到那里:
class ABase {
protected:
static int a;
};
int ABase::a;
template<class T>
class A final : private ABase
{ };
class-ABase{
受保护的:
静态int a;
};
内基::a;
模板
甲级决赛:私人阿巴斯
{ };
感谢你们中建议使用非模板基类的人。我发现的一个类似的解决方案消除了API使用者从基类继承的问题,就是将其作为最终类,并将模板类声明为友元:
class A_Data final {
private:
static int a;
template<class T>
friend class A;
};
template<class T>
class A final {
};
A类_数据最终版{
私人:
静态int a;
模板
A级朋友;
};
模板
甲级决赛{
};
感谢你们中建议使用非模板基类的人。我发现的一个类似的解决方案消除了API使用者从基类继承的问题,就是将其作为最终类,并将模板类声明为友元:
class A_Data final {
private:
static int a;
template<class T>
friend class A;
};
template<class T>
class A final {
};
A类_数据最终版{
私人:
静态int a;
模板
A级朋友;
};
模板
甲级决赛{
};
缺失类声明末尾的code>。@user2296177谢谢,修复了。是的,只需从存储静态成员的非模板基类继承即可。丢失的可能重复类声明末尾的code>。@user2296177谢谢,修复了。是的,只是从一个非模板基类继承,该基类将存储静态成员。我能看到的唯一问题是,任何人都可以从ABase
继承,有什么方法可以防止这种情况发生吗?final
在这里不是多余的吗?@Nicholas是的-但是值得付出努力吗?只需将基类隐藏在某个地方。@NicholasMertin将基类构造函数设置为私有,并将模板类设置为好友,这样可以防止意外继承。@ΔλЛ如果您不想从a
继承任何内容,则不需要这样做。我看到的唯一问题是,任何人都可以从ABase
继承,有什么方法可以防止这种情况发生吗?final
在这里不是多余的吗?@Nicholas是的-但是值得付出努力吗?只需将基类隐藏在某个地方。@NicholasMertin将基类构造函数设置为私有,并将模板类设置为好友,这样可以防止意外继承。@ΔλЛ如果您不想从a
继承任何内容,则不需要。