-3
我試圖將模板參數作爲模板參數傳遞給模板方法。我的代碼是這樣的:將模板參數傳遞給模板方法
template<class FieldType, class FieldGetter>
FieldType getField(const FieldGetter& getter, const Data& data)
{
return getter.getField<FieldType>(data);
}
不幸的是,這段代碼不能編譯。
編輯: 我的實際代碼使用上面的函數頂部的一些包裝函數。我現在明白使用包裝器會導致編譯失敗。我用你的代碼(謝謝!)爲了提供一個完整的例子。
#include <string>
struct Data {
template <typename T> T get() const {
return T();
}
};
struct Getter {
template <typename T> T getField(const Data& data) const {
return data.get<T>();
}
};
template <typename FieldType, typename FieldGetter>
FieldType getField_posix(const FieldGetter& getter, const Data& data)
{
return getter.getField<FieldType>(data);
}
template <typename FieldType, typename FieldGetter>
FieldType getField(const FieldGetter& getter, const Data& data)
{
#ifdef BUILD_OTHER
return getField_other<FieldType, FieldGetter>(getter, data);
#else
return getField_posix<FieldType, FieldGetter>(getter, data);
#endif
}
int main() {
Data data;
getField<int, Getter>(Getter(), data);
getField<std::string, Getter>(Getter(), data);
}
以上以下編譯錯誤結果代碼:
templateTest.cpp: In function ‘FieldType getField_posix(const FieldGetter&, const Data&)’:
templateTest.cpp:17:37: error: expected primary-expression before ‘>’ token
return getter.getField<FieldType>(data);
不幸的是,這段代碼很糟糕。 – Puppy
這不是很有建設性。爲什麼它很糟糕?爲什麼所有的降價?是的,如果OP發佈了一個[最小完整示例](http://stackoverflow.com/help/mcve)和錯誤消息,那會更好,但我們仍然可以提供建議和幫助。 – Sam