class SimpleClass{ public: template <typename T> voID Method(); template <> voID Method<char>();protected: template <> voID Method<int>();protected: template <> voID Method<float>();};
>子问题:是否可以为类的模板构造函数特化设置不同的访问修饰符?代码示例(不编译):
class SimpleClass{public: template <typename T>SimpleClass(T); template <> SimpleClass<char>(char);protected: template <> SimpleClass<int>(int);private: template <> SimpleClass<float>(float);};
>是否可以为类模板成员特化设置不同的访问修饰符?代码示例(不编译):
template <typename T>class Clas@R_301_6563@plate{ public: voID Method(); template <> voID Method<char>();protected: template <> voID Method<int>();protected: template <> voID Method<float>();};
> Subquestion:是否可以为类模板的构造函数特化设置不同的访问修饰符?代码示例(不编译):
template <typename T>class Clas@R_301_6563@plate{public: Clas@R_301_6563@plate(T); template <> Clas@R_301_6563@plate<char>(char);protected: template <> Clas@R_301_6563@plate<int>(int);private: template <> Clas@R_301_6563@plate<float>(float);};
更具体一点:1)我正在为这样的C 11代码寻找C 03解决方法:
class SimpleClass{public: template <typename T> SimpleClass(T); template <typename T> voID Method();};template <>SimpleClass::SimpleClass<char>(char);template <>SimpleClass::SimpleClass<int>(int) = delete;template <>voID SimpleClass::Method<char>();template <>voID SimpleClass::Method<int>() = delete;
在2)我正在寻找以下C 11代码的C 03解决方法:
template <typename T>class Clas@R_301_6563@plate{public: Clas@R_301_6563@plate(T); voID Method();};template <>Clas@R_301_6563@plate<char>::Clas@R_301_6563@plate(char);template <>Clas@R_301_6563@plate<int>::Clas@R_301_6563@plate(int) = delete;template <>voID Clas@R_301_6563@plate<char>::Method();template <>voID Clas@R_301_6563@plate<int>::Method() = delete;解决方法 经过一些讨论,这里是所有案例的完整说明,包括使用我的 previous answer方法的不同访问说明符.
template <bool C,typename T = voID>using only_if = typename std::enable_if <C,T>::type;template <typename A,typename B>using eq = typename std::is_same <A,B>::type;class SimpleClass1{public: template <typename T,only_if <!eq <T,int>{} && !eq <T,float>{},int> = 0> SimpleClass1() { }protected: template <typename T,only_if <eq <T,int>{},int> = 0> SimpleClass1() { }};class SimpleClass2{public: template <typename T,int> = 0> SimpleClass2(T) { }protected: template <typename T,int> = 0> SimpleClass2(T) { }private: template <typename T,int> = 0> SimpleClass2(T) { }};template <typename T>class Clas@R_301_6563@plate1{public: template <typename U,only_if <!eq <U,int>{} && !eq <U,int> = 0> voID Method() { }protected: template <typename U,only_if <eq <U,int> = 0> voID Method() { }};template <typename T>class Clas@R_301_6563@plate2{public: template <typename U,int> = 0> voID Method(U) { }protected: template <typename U,int> = 0> voID Method(U) { }};
我不知道所有这些都有用:-)无论如何:
>我一直小心地使所有构造函数/方法重载互斥,以避免使用不同访问说明符的问题和问题,这可能很棘手.这使得更难以概括为更多类型.模板别名有助于通用/默认情况(这是所有其他情况的补充).>但是,这与您在问题中描述的内容并不完全相同.这些方法强制执行严格的类型相等,因此不允许隐式转换.您可以尝试使用std :: is_convertible,但之后您会打开歧义的大门.>整个代码编译如此,但我没有尝试实际使用类,所以我不知道会发生什么.>我真的不知道如何使用SimpleClass1:我们怎么可能为默认构造函数显式指定模板参数(因为它不能推导出来)?>再次查看代码,我认为Clas@R_301_6563@plate与SimpleClass没有太大区别(或根本没有). Clas@R_301_6563@plate1不能具有默认模板参数,因为这将是不明确的.
总结以上是内存溢出为你收集整理的c – 是否可以为类成员模板特化(以及类模板成员)设置不同的访问修饰符?全部内容,希望文章能够帮你解决c – 是否可以为类成员模板特化(以及类模板成员)设置不同的访问修饰符?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)