gpt4 book ai didi

C++ 使变量类型取决于上下文?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:49 26 4
gpt4 key购买 nike

我有以下代码:

// Case #1
float f = 1.0f;
float f2 = sqrt(f * pi);

// Case #2
double d = 1.0;
double d2 = sqrt(d * pi);

有什么方法可以定义变量 pi 以便 operator*sqrt 将对 float 进行操作在案例 #1 中是 s,但在案例 #2 中将对 double 进行操作?

也许 C++14 变量模板可能实现?

最佳答案

有点。你当然可以定义这样一个pi:

template <class T> constexpr double pi = 3.14159...;
template <> constexpr long double pi<long double> = 3.14159...L;
template <> constexpr float pi<float> = 3.14159...F;

但是你必须指定你想要的pi:

float f2 = sqrt(f * pi<float>);
double d2 = sqrt(d * pi<double>);

更直接地说,您可以定义一些 pi 对象,根据类型重载 operator*:

struct Pi {
template <class T>
decltype(pi<T>) operator*(T val) { return val * pi<T>; }

template <class T>
friend decltype(pi<T>) operator*(T val, Pi) { return pi<T> * val; }
};

这可以让你得到你想要的语法,但那很奇怪,不要这样做。

关于C++ 使变量类型取决于上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42630911/

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