Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨模板专门化共享的静态成员_C++_Templates_C++11 - Fatal编程技术网

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级朋友;
};
模板
甲级决赛{
};

缺失
。@user2296177谢谢,修复了。是的,只需从存储静态成员的非模板基类继承即可。丢失的
可能重复。@user2296177谢谢,修复了。是的,只是从一个非模板基类继承,该基类将存储静态成员。我能看到的唯一问题是,任何人都可以从
ABase
继承,有什么方法可以防止这种情况发生吗?
final
在这里不是多余的吗?@Nicholas是的-但是值得付出努力吗?只需将基类隐藏在某个地方。@NicholasMertin将基类构造函数设置为私有,并将模板类设置为好友,这样可以防止意外继承。@ΔλЛ如果您不想从
a
继承任何内容,则不需要这样做。我看到的唯一问题是,任何人都可以从
ABase
继承,有什么方法可以防止这种情况发生吗?
final
在这里不是多余的吗?@Nicholas是的-但是值得付出努力吗?只需将基类隐藏在某个地方。@NicholasMertin将基类构造函数设置为私有,并将模板类设置为好友,这样可以防止意外继承。@ΔλЛ如果您不想从
a
继承任何内容,则不需要。