확인 실패, 나는 축복하는 읽고 꽤 질문에 "템플릿 인수를 추론 할 수 없습니다"하지만 아무도 내 경우에 맞는 것 같다 - ...추론 템플릿 인수가
또는 내가 대답을 이해하지 못하는 one가 있다는 것을 I 기분이 올바른 방향으로 가고 있지만 문제 해결을 위해 솔루션을 추출하지 못했습니다.
는내 헤더의 옷을 벗었 코드는 다음과 같습니다
template<typename T>
class TemplateProblem
{
public:
// Do I really need this or did I miss something from the STL?
template<typename Tin, typename Tout>
struct UnaryFunction : public std::unary_function<Tin, Tout>
{
virtual Tout operator()(Tin input) = 0;
};
template<typename Tin, typename Tout>
struct StaticCast : public UnaryFunction<Tin, Tout>
{
virtual Tout operator()(Tin input)
{
return static_cast<Tout>(input);
}
};
private:
T * const _data;
T const _bias;
template<typename Tin>
void Init(Tin * data, int length, UnaryFunction<Tin, T> mapper, Tin bias);
public:
template<typename Tin>
TemplateProblem(Tin * data, int length, Tin bias = Tin());
template<typename Tin>
TemplateProblem(Tin * data, int length, UnaryFunction<Tin, T> mapper, Tin bias = T());
};
template<typename T>
template<typename Tin>
void TemplateProblem<T>::Init(Tin * data, int length, UnaryFunction<Tin, T> mapper, Tin bias)
{
T mappedBias = mapper(bias);
for (int i = 0; i < length; i++)
{
_data[i] = data[i] + mappedBias;
}
}
template<typename T>
template<typename Tin>
TemplateProblem<T>::TemplateProblem(Tin * data, int length, UnaryFunction<Tin, T> mapper, Tin bias = T())
: _data(new T[length]), _bias(bias)
{
Init(data, length, mapper, bias);
}
template<typename T>
template<typename Tin>
TemplateProblem<T>::TemplateProblem(Tin * data, int length, Tin bias = T())
: _data(new T[length]), _bias(bias)
{
StaticCast<Tin, T> cast;
Init(data, length, cast, bias);
}
내가 같이 인스턴스화 :
Error 1 error C2784: 'void TemplateProblem<T>::Init(Tin *,int,TemplateProblem<T>::UnaryFunction<Tin,T>,Tin)' : could not deduce template argument for 'TemplateProblem<T>::UnaryFunction<Tin,T>' from 'TemplateProblem<T>::StaticCast<Tin,Tout>' ...\templateproblem.h 62 1 TemplateProblem
Error 2 error C2893: Failed to specialize function template 'void TemplateProblem<T>::Init(Tin *,int,TemplateProblem<T>::UnaryFunction<Tin,T>,Tin)' ...\templateproblem.h 62 1 TemplateProblem
:
VS2012에서unsigned char pixels[] = {23, 42, 65, 97};
TemplateProblem<int> tp(pixels, 4);
나는이 메시지를 얻을 class
에서 두 개의 struct
을으로 이동하면 오류가 발생합니다.건의합니다.
인스턴스화 코드와 오류 메시지는 완전히 관련이 없습니다. 이 에러는'StaticCast'에 관한 것이지만, 당신은 당신의 인스턴스 코드에서 아무 것도 가지고 있지 않습니다. –
Xeo
http://liveworkspace.org/code/4psoUf$0 잘 컴파일 ... 코드 (수정 전)가 컴파일 할 수 없습니다. – ForEveR
@Xeo : StaticCast는 하단에서 3 줄 사용됩니다. – primfaktor