#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;}
这样的输出将是:
dffd
换句话说,如果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的数据成员.
总结以上是内存溢出为你收集整理的c – 类复合体的值类型或类本身全部内容,希望文章能够帮你解决c – 类复合体的值类型或类本身所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)