두 개체의 템플릿 매개 변수가 런타임에 동일하면 주어진 개체에서 새 개체를 만들 수있는 방법이 있습니까? 예를 들어 :C++ 템플릿 클래스 및 복사 구성
나는 선언 템플릿 클래스가 : 지금, 멤버 함수 등을 기록 할
template class Object<char, int>;
template class Object<wchar_t, wint_t>;
:
template<typename _Type1, typename _Type2> class Object;
다음, 나는 템플릿이 인스턴스화가 로 :
template<typename _Type1, typename _Type2>
Object<char, int> Object<_Type1, _Type2>::toCharObject() {
if(__gnu_cxx::__are_same<_Type1, char>::__value)
return *this;
else {
//Perform some kind of conversion and return an Object<char, int>
}
}
나는 그런 __gnu_cxx::__enable_if<__gnu_cxx::__are_same<_Type1, char>::__value, _Type1>::__type
을 사용하는 등 기술의 몇 가지를 시도했다 Oject
클래스의 복사 생성자에,하지만 오류로 실행 계속 :
error: conversion from ‘Object<wchar_t, wint_t>’ to non-scalar type ‘Object<char, int>’ requested
내가이 작업을 수행 할 수있는 방법이 있나요? 어떤 도움이라도 대단히 감사하겠습니다!
템플릿 유형 이름이 잘못되었습니다. Underscore와 대문자로 된 식별자는 ** 구현에서 사용하도록 예약되어 있습니다 **. 컴파일러 나 표준 라이브러리에 정의 된 이름과 충돌 할 수 있습니다. – jalf
@jaif : typename에 대해 많은 걱정하지 마십시오. 방금 모범을 보았습니다. 내 모든 코드는 실제로 다른 네임 스페이스에 정의되어 있으므로 충돌이 없어야합니다. – themoondothshine
네임 스페이스는 문제 유형 이름이 아닙니다. 예를 들어 _Type1은 모든 상황 (예 : 매크로 일 수 있음)에 예약되어 있으며이 경우 구현에서 사용되지 않을 수 있습니다. 아니면 게시 한 내용이 문제의 원인이되는 실제 코드가 아니라고 말하는 것입니까? 글쎄, 그러지 마. –