2013-03-15 13 views
2

据我所知,没有用于定义类型为System::Decimal(与C#中的M后缀 - 即Decimal d = 100.5M)类似的编译时常量的文字后缀。如何在C++/CLI中定义用于属性的System :: Decimal文字?

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) 。

是否可以正确初始化该属性的默认值?

+0

即使在C#中也是不可能的。 – IllidanS4 2017-03-21 21:22:00

回答

1

尝试DefaultValue = static_cast<Decimal>(500.0)

在常量表达式中允许使用static_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); } 
}; 
+0

不幸的是,这样做会产生错误C3101,其中声明属性值必须是编译时常量(对于/ clr:pure,/ clr:safe和/ clr)。 – 2013-03-16 05:14:24

+0

@Steve:好的,这是想法#2 – 2013-03-16 06:02:56

相关问题