有一个元组的包装器,它描述了访问元组元素的功能。此包装器用于执行搜索指定类型的类的模板函数。 这是代码模板函数:
template
<
Calculating::CalculateTypes calculateType,
class SourceDataType = typename calculating_list_type::template strategy_type_selector<calculateType>::source_data_type
>
auto calculate(const SourceDataType & sourceData)
-> decltype(typename calculating_list_type::template strategy_type_selector<calculateType>::result_type())
{
auto& strategy = _calculates.lookup<calculateType>(); //error in this place...
strategy.setSourceData(sourceData);
strategy.calculate();
return strategy.getResult();
}
在此上下文中,_calculates是类的成员,我们称之为函数,数据类型:calculation_list_type
这是访问包装函数元组的代码:
template<CalculateTypes calculateType>
inline auto lookup()
-> decltype(std::get<Private::IndexOfList<calculateType, StrategyTypes...>::value>(_calculatingTuple))
{
return std::get<Private::IndexOfList<calculateType, StrategyTypes...>::value>(_calculatingTuple);
}
最有趣的是模板函数访问功能可以很好地工作,例如:
std::cout << es.getCalculateList().lookup<Calculating::CalculateTypes::MAIN_VOLUME>().getName() << std::endl;// works great...
我做错了什么?