The variable template is one of the major proposals in Standard C++14. The main purpose of the variable template is to simplify definitions and uses of parameterized constants. With variable templates of C++14, manipulation of constant values with various types can be significantly simplified as shown in below example. PI is declared as a variable template, and given a constant value 3.1415926535897932385 with type conversion. If the use of template is initialized with PI<int>, PI is initialized with a type conversion of 3.1415926535897932385.
template<typename T> constexpr T PI = T(3.1415926535897932385); template<typename T> T area (T r) { return PI<T> * r * r; } int main() { printf("PI: %d, area: %d\n", PI<int>, area(2)); // PI: 3, area: 12 printf("PI: %lf, area: %lf\n", PI<double>, area(2.0)); // PI: 3.141593, area: 12.566371 return 0; }
Templates can also be applied to non-constant variables. For example, when assigning a different value, 0.618, to PI<float>, PI<double> is not changed. It is not difficult to understand because the variable follows the rules of templates that initialize the instance for each use.
template<typename T> T Value = T(3.1415926535897932385); int main() { Value<float> = 0.6180339887498948482; printf("%f\n", Value<float>); // Output : 0.618034 printf("%lf\n", Value<double>); // Output : 3.141593 return 0; }