0

There is a wrapper for a tuple, it describes the function of access to the elements of the tuple. This wrapper is used in the template function of a class that performs the search for a specified type. Here is the code template function:

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();
}

In this context, _calculates is a member of the class, which we call the function, the type of data: calculating_list_type

Here's the code to access the wrapper function tuple:

template<CalculateTypes calculateType>
inline auto lookup()
  -> decltype(std::get<Private::IndexOfList<calculateType, StrategyTypes...>::value>(_calculatingTuple))
{
   return std::get<Private::IndexOfList<calculateType, StrategyTypes...>::value>(_calculatingTuple);
}

What is most interesting is that a template function access function works perfectly for example:

std::cout << es.getCalculateList().lookup<Calculating::CalculateTypes::MAIN_VOLUME>().getName() << std::endl;// works great...

What did I do wrong?

TartanLlama
  • 63,752
  • 13
  • 157
  • 193
Craft
  • 1
  • 1

0 Answers0