Ber*_*ard 5 c++ variable-templates c++14
我有以下代码:
// Case #1
float f = 1.0f;
float f2 = sqrt(f * pi);
// Case #2
double d = 1.0;
double d2 = sqrt(d * pi);
Run Code Online (Sandbox Code Playgroud)
有什么办法来定义变量pi,以便operator*与sqrt将在操作floatS IN案例#1,但在操作double中的情况#2秒?
也许C++ 14变量模板可能有用吗?
Bar*_*rry 11
有点.你当然可以定义这样一个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;
Run Code Online (Sandbox Code Playgroud)
但是你必须指定pi你想要的:
float f2 = sqrt(f * pi<float>);
double d2 = sqrt(d * pi<double>);
Run Code Online (Sandbox Code Playgroud)
更直接地,您可以根据类型定义一些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; }
};
Run Code Online (Sandbox Code Playgroud)
这可以让你得到你想要的语法,但这很奇怪,不要这样做.