만약 내가 잘못 정정 해줘. 구현이 잘못되었다고 생각합니다. 수학 선언에서 빌드에 약간의 차이가 있습니다. float에 대한 int의 암시 적 프로모션.
공개가 위험한 경우 수업에서 비공개로 간주합니다.
나는 이것들과 가깝다. 주석 처리 된 코드 블록은 을 컴파일하지는 않습니다.
public static Vertex operator/(Vertex a , Vertex b)
{
Vertex c = new Vertex ();
c . x = a . x/b . x;
c . y = a . y/b . y;
c . z = a . z/b . z;
return c;
}
public static Vertex operator/(Vertex a , float b)
{
Vertex c = new Vertex ();
c . x = a . x/b;
c . y = a . y/b;
c . z = a . z/b;
return c;
}
public static Vertex operator/(Vertex a , int b)
{
Vertex c = new Vertex ();
c . x = a . x/b;
c . y = a . y/b;
c . z = a . z/b;
return c;
}
public static Vertex operator + (Vertex a , Vertex b)
{
Vertex c = new Vertex ();
c . x = a . x + b . x;
c . y = a . y + b . y;
c . z = a . z + b . z;
return c;
}
public static implicit operator float[] (Vertex a)
{
float [ ] f = new float [ 3 ];
f [ 0 ] = a . x;
f [ 1 ] = a . y;
f [ 3 ] = a . z;
return f;
}
//public dynamic float [ ] operator/(float[] a, int b)
// {
// float [ ] c = new float [ a . Count () ];
// for (int i = 0 ; i < a . Count () ; i++)
// {
// c[i] += a [ i ]/b;
// }
// return c;
// }
float [ ] NewCentroidf3 (Vertex v0 , Vertex v1)
{
float[] C = new float[3];
C = v0 + v1;
//C /= 2.0f;
//C = C/2; // would work if above worked.
C [ 0 ] /= 2.0f;
C [ 1 ] /= 2.0f;
C [ 2 ] /= 2.0f;
return C;
}
우리는 문제를 해결할 C 번호의 가상의 미래 버전으로 "확장 연산자를"추가 고려하고있다. 설문 조사 :이 기능에 대한 훌륭한 시나리오가 있습니까? 우리가 얻을 수있는보다 실제적인 시나리오 일수록, 언젠가 기능이 구현 될 가능성이 커집니다. 내 방식대로 보내라. 내 블로그에서 이메일 링크를 사용할 수 있습니다. # : 17694 Eric Lippert
[Generics 및 "이진 연산자의 매개 변수 중 하나가 포함 된 형식이어야합니다"오류] (http://stackoverflow.com/questions/6891776/)의 중복 제네릭 - 중 - 하나 - 매개 변수 중 하나 - 이진 - 연산자 -해야 - 포함 - 포함); [MSDN here] (https://msdn.microsoft.com/en-us/library/zb1a95x1.aspx)도 참조하십시오. –
전혀 도움이되지 않습니다 : 컴파일러 오류를 이끌어내는 방법을 보여줍니다. –
잘못된 dup으로 오류가 발생했습니다. Keyu Gan이 지적했듯이 [이것은 문제와 해결책에 대한 더 나은 설명입니다] (https://stackoverflow.com/questions/1687395/overloading-the-operator-to-add-two-arrays). –