2012-06-07 2 views
0

클래스는 유형을 인스턴스화하지 않고 노출 할 수 있습니다. 예 :클래스가 인스턴스화하지 않고 숫자를 노출 할 수 있습니까?

class bar { 
    typedef int GET_TYPE; 
}; 

template<class T> 
void foo() { 
    typename T::GET_TYPE t; 
    // do something with t 
} 

foo<bar>(); 

정수를 비슷한 방식으로 표시 할 수 있습니까? 템플리트 매개 변수는 유형 또는 내장 유형일 수 있다는 점에서 의미가 있습니다.

답변

5

enum이 좋습니다.

class bar 
{ 
    enum { MyNumericValue = 17, }; 
}; 

이것은 정수 값에서만 작동하지만 모든 버전의 C++에서 작동합니다.

정수가 아닌 값에 대해서는 CatPlusPlus's modern solution (C++11-only)을 참조하십시오.

+0

쉼표가 필요합니까? – ritter

+0

정적 const 내가 더 나은 솔루션입니다. 적어도 내장 된 모든 유형에 대해 작동합니다. – Forgottn

+0

@ 프랭크 : 아니지만, 여러 값을 내보내려면 세미콜론이 아닌 쉼표를 사용하십시오. –

4

예, 정적 데이터 멤버를 사용하십시오.

struct foo { 
    static constexpr int something = 42; 
}; 

// ... use foo::something ... 
+0

'constexpr'은 C++ 0x에서만 유효합니다. 그렇지 않으면'const'가됩니다 – Forgottn

+2

표준에 따르면'int foo :: something; '을 정확히 한 번 정의해야 할 수도 있습니다. –

관련 문제