생성자 템플릿을 조건부로 활성화하려고합니다. 완전히 C++ 11 호환 컴파일러를 사용하면 여분의 기본 템플릿 인수를 사용하여이를 수행하는 방법을 알고 있습니다. 그러나, 나는 std :: enable_if하지만 기본 함수 템플릿 인수를 지원하지 않는 VS2012를 지원해야합니다. C++ 11enable_if 및 VS2012 생성자
, 나는 다음과 같은 작성합니다
template<typename T>
struct Class
{
template<typename O,
typename = typename std::enable_if<std::is_convertible<O*, T*>::value>::type>
Class(O*) {}
};
을 나는 다음과 같은 노력하지만 오류 C4336 다양한 후속 오류 제공 :
template<typename T>
struct Class
{
template <typename O>
Class(O*, typename std::enable_if<std::is_convertible<O*, T*>::value>::type *= nullptr)
{
}
};
이 거기를 어떤 방법 으로이 작품 VS2012 만들 수 있습니까?
추가 :
다음과 같이 클래스의 사용법은 다음과 같습니다
이struct X { };
struct X2 : X { };
struct Y { };
struct Client
{
Client(Class<X> x) {}
Client(Class<Y> y) {}
};
void test() {
X2* x2;
Client client(x2); // error C2668: ambiguous call to overloaded function
// (without std::enable_if)
}
클래스에 다른 생성자가 있습니까? 아니면이 클래스가 유일한 것입니까? – skypjack
실제 클래스에는 다른 생성자도 있습니다. – user2019765