我有以下代码:
// Case #1
float f = 1.0f;
float f2 = sqrt(f * pi);
// Case #2
double d = 1.0;
double d2 = sqrt(d * pi);
是否有任何方法可以定义变量pi
,以便{1}}和operator*
将在案例#1中的sqrt
上运行,但会在{{1}上运行案例#2中的s?
使用C ++ 14变量模板可能有可能吗?
答案 0 :(得分: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;
但是你必须指定你想要的pi
:
float f2 = sqrt(f * pi<float>);
double d2 = sqrt(d * pi<double>);
更直接地说,您可以根据类型定义一些刚刚重载pi
的{{1}}对象:
operator*
这可以让你获得你想要的语法,但这很奇怪,不要这样做。