2009-09-07 11 views
8

정적 컨텍스트에서 C++ 클래스 연산자를 오버로드 할 수 있습니까? 예 : 당신이 연산자 클래스에서 작동 의미하는 경우C++ 정적 연산자 오버로드

class Class_1{ ... } 
int main() 
{ 

    Class_1[val]... 

} 
+0

해야 하는가'Class_1 [발]'수율 A에 대해, op[]에 대한 at처럼 plus<a, b>을 그 템플릿을 사용할 수 있습니다 유형? 당신은'Class_1 [val] v;'을 할 것으로 기대합니까? –

+1

필자는 정수 값을 산출 할 것이지만 유형은 괜찮습니다. – jameszhao00

+0

C++에서는 타입 시스템에서 타입을 표현할 수 없습니다 (오직'std :: type_id' 만 있습니다) 정적으로 오버로드 될 수있는 연산자는 생각할 수 없습니다. C++에서 구현 아이디어가 실현 가능한지 여부를 묻는 대신, 해결해야 할 실제 _ 문제점을 제시하십시오. 누군가 구현을 제안 할 수 있습니다. – sbi

답변

13

내장 연산자를 사용하여 메타 프로그래밍을 찾고있는 경우 : 이러한 것은 불가능합니다. 내장 연산자는 컴파일 시간 값이 아닌 런타임 값에서 작동합니다.

당신은 그것에 대해 boost::mpl을 사용하고, 대신 내장 연산자를 사용하는, op+

int main() { 
    using boost::mpl::vector; 
    using boost::mpl::at_c; 
    using boost::mpl::plus; 
    using boost::mpl::int_; 

    typedef vector<int, bool, char, float> Class_1; 
    typedef vector< int_<1>, int_<2> > Numeric_1; 

    at_c<Class_1, 0>::type six = 6; 
    typedef plus<at_c<Numeric_1, 0>::type 
       ,at_c<Numeric_1, 1>::type>::type r; 
    int i3[r::value] = { 4, 5, 6 }; 
    return ((i3[0] + i3[1] + i3[2]) * six) == 90; 
} 
3

는 이해가되지 않습니다 위, 그것은 int 또는 doubleoperator + 수도 연산자를 말하는 것과 같다. 연산자는 함수에 대한 문법적 설탕이며 유형이 아닌 varibles (값)로 작동합니다.

+1

'[]]와 같은 연산자를 사용하여 가장 간단한 방법으로 액세스하고자하는 "자체"에 무언가를로드하는 일종의 유틸리티 클래스 (정적 멤버 만 사용)가 있다면 의미가 있습니다. –

+1

그래, @ jave.web의 코멘트에 덧붙여서 : 클래스의 정적 범위 *에 데이터가있을 때 케이스 *에서 확실히 이해할 수있다. (OP는 또한 정적 스코프를 명시 적으로 언급합니다.) 따라서 간단한 예제에서는 아니지만 [],(), <<, >> 등과 같은 요소는 복잡한 관리자 클래스의 모든 유형에 완벽한 구문 설탕 일 수 있습니다. , 싱글 톤 인스턴스를 강요하지 않습니다. –

5

나는이 앞에서 잘못 될 수는 있지만 가능하지 않다고 생각합니다. 나는 왜 당신이 이것을하고 싶어하는지 묻고 싶다. 인스턴스가 아닌 클래스에서 작업을 수행하는 대신 응용 프로그램 전체에 하나의 인스턴스 만 있으면됩니까? 이 경우 the singleton pattern을 사용해야합니다.

+1

미친 듯이 싱글 톤 패턴을 사용 했었지만 싱글 톤 코드가 테스트를 작성하는 번거 로움 때문에 중단되었습니다. – jameszhao00

1

아니요, 연산자는 클래스의 정적 멤버 일 수 없습니다. 대신에 일반 정적 함수를 사용하십시오.