두 개의 정수를 사용하는 함수 템플릿 집합이 있습니다. 함수 인수 중 하나를 변환해야한다는 점을 제외하면 이들은 인스턴스화해야합니다. 이러한 목적으로 변환 연산자가 제공됩니다. 그러나 컴파일러 (VS 2013 익스프레스 미리보기)는 변환 가능성을 인식하지 않습니다. 아래 코드를 참조하십시오. conversion_op.h conversion_op.cpp에서함수 템플릿이있는 상태에서 인수 변환
template<int N>
class Proxy
{
};
template<int M, int N>
void func(const Proxy<M>& p1, const Proxy<N>& p2)
{
}
typedef Proxy<1> SpecialProxy;
class Orig
{
SpecialProxy P;
public:
operator SpecialProxy() const
{
return P;
}
};
에서
#include "conversion_op.h"
//template void func(const SpecialProxy&, const SpecialProxy&);
//template void func(const SpecialProxy&, const Proxy<2>&);
//template void func(const Proxy<2>&, const SpecialProxy&);
//template void func(const Proxy<2>&, const Proxy<2>&);
int Test()
{
Orig a;
SpecialProxy p1;
Proxy<2> p2;
func<1,1>(a, p1); //OK
func<1,2>(a, p2); //OK
func<1,1>(p1, a); //OK
func<2,1>(p2, a); //OK
func(a, p1); //Error
func(a, p2); //Error
func(p1, a); //Error
func(p2, a); //Error
}
오류는 다음과 같습니다. 는 " '원래 값'에서 'const를 프록시 &'에 대한 템플릿 인수를 추론 할 수없는 참조하시기 바랍니다 func 선언. "
나는operator const SpecialProxy&() const;
에 의해
operator SpecialProxy() const;
를 교체하려했지만 오류가 동일하게 유지됩니다.
또한 필요한 기능을 명시 적으로 시도 (conversion_op.cpp에서 주석 처리 된 코드)했지만 운이 없었습니다.
모든 의견에 감사드립니다. 감사합니다.
아직 해결책을 찾지 못했습니다. 아무도 도와 줄 수 있어요. 고맙습니다. – skm