2013-03-15 5 views
2

내가 알 수있는 한, System::Decimal (C#의 M 접미사와 비교 - 즉 Decimal d = 100.5M) 유형의 컴파일 타임 상수를 정의하기위한 리터럴 접미사가 없습니다. 나는 진수 리터럴을 정의 할 수없는 경우C++/CLI에서 속성에 사용할 System :: Decimal 리터럴을 어떻게 정의합니까?

literal System::Decimal myDecimal = 100.5; 

, 어떻게 나는이 분야의 하나로서 소수를 필요로하는 속성을 초기화 할 수 있습니다 : 또한, 다음 코드는 컴파일러에 의해 거부? 설명하기 위해 다음 코드를 고려 : 그것은 속성의 유형과 일치하지 않기 때문에 다음 런타임에 의해 거부 double를 입력 컴파일로

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의 현재 값 (Decimal) 유효하지 않습니다 .

이 속성의 기본값을 올바르게 초기화 할 수 있습니까?

+0

C#에서도 가능하지 않습니다. – IllidanS4

답변

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) 여야합니다. –

+0

@ 스티브 : 오케이, 여기 아이디어 # 2 –