-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