当我说“属性”时,我的意思是沿着std:array<int, 5> arr
的方向。 5
是该数组的一个属性。我可以在C++中创建“属性”类型吗?
这是一个激励性的例子:假设我想创建一个包含格式信息的数字或字符串。所以我可能希望能写Double<7,2> foo
,这意味着我希望foo是一个double,当我打印它时,它的宽度为7,精度为2.我可以按照常规方式进行分配:
foo = 42;
double bar = foo;
有没有办法做到这一点?
你可能会问为什么我想这样做。为什么不,例如,定义一个在构造函数中使用宽度和精度的类?答案是我认为你不能在结构中使用它们。举例来说,我希望能够做一些事情,如:
struct Account {
std::string description;
Double<7, 2> amount;
Double<7, 2> balance;
Double<9, 3> percent;
};
你问[非类型模板参数(http://en.cppreference.com/w/cpp/language/template_parameters#Non-type_template_parameter)? –
'5'是*模板参数*。这个概念已经有了一个名字:-) –
'template struct Double {};',这是一个赋值的重载,适当的转换运算符将允许你以你拥有的方式使用'Double'这个问题。 –
Bathsheba