gpt4 book ai didi

C++ 如何从一个模板类转换为另一个模板类?

转载 作者:行者123 更新时间:2023-11-30 01:47:03 25 4
gpt4 key购买 nike

我有一个打算使用的类,类型为floatdouble。据我所知,没有办法限制模板选项,所以我可能在这里做了一些危险的事情?

template<class T>
class A
{
A(T arg) { _data = arg; }

T _data;
}

typedef A<float> A_f;
typedef A<double> A_d;

我怎样才能做到以下几点?

int main()
{
A_f f(3.1415);
A_d d(3.1415);
f = (A_f)d;
}

IE:将包含 double 类型数据的类转换为包含 float 类型数据的类。

编辑:这似乎没有任何进展,所以我试着玩弄它,但显然我不知道在这里做什么,所以它无法编译......

template<class T>
class A
{
friend // Intention is for T to be double here
A<float> operator A<float>(const A<T> input);
}

A<float> operator A<float>(const A<double> input)
{
return A<float>(input._data);
}

也许这有助于解释我想要实现的目标?

Adam 的第二次编辑:

return A<float>((float)input._data);

这样更好吗?

最佳答案

你可以使用 std::enable_if 只允许某些类型:

#include <type_traits>
using namespace std;

// Our catch-all is not defined, so will not compile
// Could also be made to print a nice error message
template<typename T, typename Sfinae = void> class A;

// Ok if T is float or double
template<typename T>
class A<T, typename std::enable_if<std::is_same<T, float>::value
|| std::is_same<T, double>::value>::type>
{
// Your class here
};

int main()
{
A<int> a; // FAILS
A<float> b; // Ok
A<double> c; // Ok

return 0;
}

然后你只需要在你的类中定义一个转换运算符来使转换工作。

关于C++ 如何从一个模板类转换为另一个模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169883/

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