2013-03-26 2 views
3

내 코드는 주어진 함수가 주어진 형식을 매개 변수로 사용하는지 여부를 결정하는 것으로 가정합니다. 당신의 미래에 대한 답을 "무엇을 위해"나는 짧게 대답 할 것입니다 : boost::enable_if 템플릿과 함께 사용합니다.함수 인수 형식

이 코드는 C++ 11의 decltype 연산자를 사용합니다. 제 질문은 : C++ 03을 사용하여 동일한 목표를 달성 할 수 있습니까?

#include <iostream> 

template <class F, class P> 
struct has_arg_of_type 
{ 
    static bool const value = false; 
}; 

template <class R, class A> 
struct has_arg_of_type<R (A), A> 
{ 
    static bool const value = true; 
}; 

template <class R, class T, class A> 
struct has_arg_of_type<R (T::*)(A), A> 
{ 
    static bool const value = true; 
}; 

int pisz(int); 

class MyClass 
{ 
public: 
    void pisz(int); 
}; 

int main(int argc, char *argv[]) 
{ 

    std::cout << "MyClass::pisz has the int as an argument? " << has_arg_of_type<decltype(&MyClass::pisz), int>::value << std::endl; // Line 32 
    std::cout << "pisz has the int as an argument? ? " << has_arg_of_type<decltype(pisz), int>::value << std::endl; 
    std::cout << "pisz has the float as an argument? ? " << has_arg_of_type<decltype(pisz), float>::value << std::endl; 

    return 0; 

} 

오류 :

In function 'int main(int, char**)': 
Line 32: error: 'MyClass::pisz(int)' cannot appear in a constant-expression 
+0

예, 오류가있었습니다. 나는 codepad (원래 코드를 작성하는데 사용 된 코드 패드)가 C++ 11을 아직 지원하지 않는다고 생각한다. 그러나 코드는 MinGW-32 Qt 5.0 (IIRC g ++ 4.6)에서 컴파일됩니다. – user2146414

답변

1

난 당신이 Boost.FunctionTypes을 이용하여이 작업을 수행 할 수 있다고 생각하거나, 또한 부스트 타입의 특성을 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! 귀하의 코드에서 중요한 부분은 BOOST_TYPEOF입니다. 나는 그것을 달성하기위한 쉬운 (부스트를 포함하지 않는) 방법이 있기를 바랐다. 그럼에도 C++ 03에서 내가 원하는 것을 얻을 수 있습니다. – user2146414

+0

그것은 당신의 문제를 해결했기 때문에, 적어도 해결되었다고 표시 할 수 있습니다. upvote !! :) –

+0

나는 upvote에 지쳤다. 그러나 나의 명성이 너무 낮다. (그리고 나는 포럼에 아주 새로운 사람이다. – user2146414