c – 类复合体的值类型或类本身
发布时间:2020-12-16 09:55:19 所属栏目:百科 来源:网络整理
导读:我正在努力建立一个类似于以下的课程 #include cstdlib#include iostream#include typeinfo#include type_traits#include complextemplateclass K,class T = typename std::conditionalstd::is_classK::value,typename K::value_type,K::typeclass A { publi
我正在努力建立一个类似于以下的课程
#include <cstdlib> #include <iostream> #include <typeinfo> #include <type_traits> #include <complex> template<class K,class T = typename std::conditional<std::is_class<K>::value,typename K::value_type,K>::type> class A { public: K v; T u; void type() { std::cout << typeid(u).name() << std::endl; } }; int main() { A<std::complex<double>> a; a.type(); A<std::complex<float>> b; b.type(); A<float> c; c.type(); A<double> d; d.type(); return 0; } 这样的输出将是: d f f d 换句话说,如果K的类型为std :: complex< K>,则需要变量u为T类型,否则为K.这可以用C 11实现吗?谢谢. 解决方法
您可以使用部分特化来获得正确的类型,可能是这样的:
template <typename T,bool> struct ValueType { using type = T; }; template <typename T> struct ValueType<T,true> { using type = typename T::value_type; }; template <class K> struct A { using T = typename ValueType<K,std::is_class<K>::value>::type; void type() { std::cout << typeid(T).name() << std::endl; } }; 如果需要适当的数据成员,可以将类型别名设为类成员,然后声明类型为T的数据成员. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |