const 멤버 함수에서 일부 유틸리티 코드를 전문화하려고하지만 간단한 테스트 케이스가 작동하는 데 문제가 있습니다. const 멤버 함수에 대한 태그 const_qualified
을 contain
해야 MPL 순서-
내가 Boost.FunctionTypes하고 components<FunctionType>
템플릿을 사용하고있는 작업을 단순화합니다.const 멤버 함수 포인터에 대한 전문화
하지만 아래의 테스트 코드를 사용하면 const 멤버 함수의 특수화가 실패합니다. 아무도 그것을 작동하게하는 방법을 알고 있습니까?
테스트 코드 프린트 아웃 (VC8를 사용하여 1.40 부스트)
비 CONST
비 CONST
예상 출력된다 : 비
const
const
테스트 코드 자체 :
#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/function_types/function_type.hpp>
#include <boost/mpl/contains.hpp>
namespace ft = boost::function_types;
namespace mpl = boost::mpl;
template<typename F>
struct select
{
template<bool IsConst /* =false */>
struct helper {
static void f() { std::cout << "non-const" << std::endl; }
};
template<>
struct helper</* IsConst= */ true> {
static void f() { std::cout << "const" << std::endl; }
};
typedef ft::components<F> components;
typedef typename mpl::contains<components, ft::const_qualified>::type const_qualified;
typedef helper<const_qualified::value> result;
};
typedef boost::function<void (void)> Functor;
template<typename MF>
Functor f(MF f)
{
return boost::bind(&select<MF>::result::f);
}
class C
{
public:
void f1() {}
void f2() const {}
};
int main()
{
f(&C::f1)(); // prints "non-const" as expected
f(&C::f2)(); // prints "non-const", expected "const"
}
것은, 내가 아직까지 테스트 솔루션을 받아 드리겠습니다 ...
is_member_function_pointer<>
같은분류 메타 기능을 선택적으로 태그 매개 변수를 사용 : const 멤버 함수에 ecialize 원래 문제. –