gpt4 book ai didi

c++ - 复杂类的值类型,或类本身

转载 作者:太空狗 更新时间:2023-10-29 20:12:32 26 4
gpt4 key购买 nike

我正在尝试创建一个类似于下面的类

#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

否则,我需要变量 u类型为 T如果K类型为 std::complex<K> , 或 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++ - 复杂类的值类型,或类本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com