Nul*_*ull 0 c++ templates namespaces const constants
我想限定它可用于任意类型(例如自定义常量float,double等).例如,假设我希望定义一个值为pi的常量.
显而易见的解决方案是使用#define pi 3.14159265359,但后来pi不会在命名空间中,我冒着名称冲突的风险.我没有使用C++ 14所以我不能使用变量模板.我能想到这样做的最好方法如下:
#include <iostream>
using namespace std;
namespace constants {
template<typename T> T pi() {
return 3.14159265359;
}
}
int main() {
float pitest = 0;
pitest = constants::pi<float>();
cout << pitest << endl;
cout << constants::pi<long double>() << endl;
cout << constants::pi<int>() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我现在可以在命名空间中定义这些常量,我可以根据需要使用任意(数字)类型.但是,至少有两个不良特征:
pitest = constants::pi<float>();而不是简单,pitest = constants::pi();即使pitest显然是一个float.有一个更好的方法吗?
为什么不使用自动转换为任何类型的特殊对象?
static struct {
template<class T> operator T() const constexpr
{ return (T)3.14159265359; }
} pi;
Run Code Online (Sandbox Code Playgroud)
您甚至可以为更大的类型,任意精度算术,公式系统等添加特化.
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |