c – 类复合体的值类型或类本身

c – 类复合体的值类型或类本身,第1张

概述我正在努力建立一个类似于以下的课程 #include <cstdlib>#include <iostream>#include <typeinfo>#include <type_traits>#include <complex>template<class K, class T = typename std::conditional<std::is_class<K>::value, t 我正在努力建立一个类似于以下的课程

#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 – 类复合体的值类型或类本身所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存