2013-08-03 4 views
1

구조체를 lvalue (변수로 사용할 수 없음)로 사용할 수 없게하는 방법이 있습니까?D struct lvalue 비활성화 할

생성자와 opAssign을 사용하지 않으려했지만, 결국에는 함수에서 할당 할 수 있습니다.

unittest 
{ 
    //mystruct doesntCompile; 
    mystruct shouldntCompile = makeMyStruct(); 
} 


struct mystruct 
{ 
    @disable this(); 
    @disable this(this); 
    @disable void opAssign(ref mystruct); 
    @disable void opAssign(mystruct); 
    this(int dummyArgument){} 
} 

mystruct makeMyStruct() 
{ 
    return mystruct(0); 
} 
+0

당신은'const' 키워드를 찾고 있습니까? –

답변

2

좌변로서 사용되는 구조체를 해제 할 수있는 방법은 (a 변수로서 이용 될 수 없다) 있는가?

아니요, 불가능합니다. 모든 유형은 lvalues ​​인 인스턴스를 가질 수 있습니다.

let us know what you are trying to achieve 경우 더 나은 답변을 얻을 수 있습니다. 구조체가 lvalue로 사용되지 않도록 하시겠습니까?

+0

질문은 주로 병적 인 호기심이었습니다. –

+0

원래 문제는 모든 연산자 (opOpAssign 포함)를 사용할 수있는 swizzle을 사용하여 벡터 구조체를 구현하는 것이 었습니다. 이제 우리는 프록시 구조체를 사용하여이를 달성했습니다. 프록시 구조체는 그 자체로 변수로 사용되어서는 안되며, 표현식에 일시적으로 존재해야합니다. 당신은 이것을 할 수 없어야합니다 : 'auto proxy = vec.xyz; proxy.x = 5; // vec.x'를 변경합니다. 그러면 값 유형 예상이 무효화됩니다. 현재 구현에서는 프록시 내부에서 공용체를 사용합니다. –

+0

그래, 프록시를 통해 작성할 수있는 문제는 무엇입니까? 읽을 수 있습니까? 프록시의 구현을 공유하고 그것이 사용되는 방법이 무엇인지 정확히 기술한다면 나는 내가 도울 수 있다고 확신합니다. 귀하의 질문에 묻는 것은 귀하가해야 할 일이 아닌 것 같습니다. –