Configuration 如何在C+;中定义用于属性的System::Decimal文字+/CLI?
据我所知,没有文字后缀来定义编译时常量类型Configuration 如何在C+;中定义用于属性的System::Decimal文字+/CLI?,configuration,attributes,c++-cli,decimal,literals,Configuration,Attributes,C++ Cli,Decimal,Literals,据我所知,没有文字后缀来定义编译时常量类型System::Decimal(与C#——即Decimal d=100.5M中的M后缀相比)。此外,编译器会拒绝以下代码: literal System::Decimal myDecimal = 100.5; 如果无法定义十进制文字,那么如何初始化需要十进制作为其字段之一的属性?为了说明,请考虑下面的代码: using namespace System; public ref class MyConfigElement : Configuration
System::Decimal
(与C#——即Decimal d=100.5M
中的M后缀相比)。此外,编译器会拒绝以下代码:
literal System::Decimal myDecimal = 100.5;
如果无法定义十进制文字,那么如何初始化需要十进制作为其字段之一的属性?为了说明,请考虑下面的代码:
using namespace System;
public ref class MyConfigElement : ConfigurationElement
{
public:
[ConfigurationProperty("Money", DefaultValue = 500.0, IsRequired = false)]
property Decimal Money { Decimal get(); void set(Decimal value); }
};
当前值500.0编译为类型double
,无效,运行时会拒绝该值,因为它与属性的类型(Decimal
)不匹配
是否可以正确初始化此属性的默认值?尝试
DefaultValue=static\u cast(500.0)
只要不需要调用用户定义的转换函数,就可以在常量表达式中使用static\u cast
否则,可能使用一个全局变量,它是一个常量表达式
const Decimal MyConfigElementMoneyDefault = 500.0;
public ref class MyConfigElement : ConfigurationElement
{
public:
[ConfigurationProperty("Money", DefaultValue = MyConfigElementMoneyDefault, IsRequired = false)]
property Decimal Money { Decimal get(); void set(Decimal value); }
};
不幸的是,这样做会产生错误C3101,该错误指出属性值必须是编译时常量(对于/clr:pure、/clr:safe和/clr)。@Steve:ok,这里的想法是即使在C中也不可能。