함수가 존재하는지 안 하는지 어떻게 알 수 있을까요?


C++ 템플릿에서 함수의 존재 유무에 따라 다른 일을 하도록 만들고 싶습니다. 제가 만든 코드에서 FUNCTION_EXISTS()의 역할을 하는 기능이 있나요?

소스코드

template<class T>
std::string optionalToString(T* obj)
{
    if (FUNCTION_EXISTS(T->toString))
        return obj->toString();
    else
        return "toString not defined";
}
  • 2016년 01월 07일에 작성됨

조회수 211


1 답변


좋아요
0
싫어요
채택취소하기

SFINAE(Substitution Failure Is Not An Error)를 쓰세요 SFINAE로 클래스가 특정 메소드를 지원하는지 확인할 수 있습니다

#include <iostream>

struct Hello
{
    int helloworld()
    { return 0; }
};

struct Generic {};


// SFINAE test
template <typename T>
class has_helloworld
{
    typedef char one;
    typedef long two;

    template <typename C> static one& test( typeof(&C::helloworld) ) ; //helloworld메소드가 있는지 확인 해줌
    template <typename C> static two& test(...);


public:
    enum { value = sizeof(test<T>(0)) == sizeof(char) };
};


int main(int argc, char *argv[])
{
    std::cout << has_helloworld<Hello>::value << std::endl; // result : 1
    std::cout << has_helloworld<Generic>::value << std::endl; // result : 0
    return 0;
}
  • 2016년 01월 07일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close