好吧,我讀throught頗有些「不能推導出模板參數」問題,但沒有一個似乎符合我的情況 - 或者我不明白的答案...嵌套模板推導模板參數失敗
有one,我感覺朝着正確的方向發展,但是我沒能解決我的問題。
在我的頭中的精簡代碼如下所示:
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);
}
我實例是這樣的:
unsigned char pixels[] = {23, 42, 65, 97};
TemplateProblem<int> tp(pixels, 4);
從VS2012我得到的消息:
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
的當我將兩個struct
s作爲移出class
時也會發生錯誤建議。
實例化代碼和錯誤消息是完全無關的。這個錯誤提到'StaticCast',但是你的實例代碼中沒有任何地方。 –
Xeo
http://liveworkspace.org/code/4psoUf$0編譯得很好......你的代碼(在更正之前)是不可編譯的。 – ForEveR
@Xeo:StaticCast從底部開始使用3行。 – primfaktor