Причина, по-видимому, очень проста: если вы пишете
handler.handleParam<Table<float>>(param_name, tab);
вы явно указываете T = Table<float>
. Так что handleParam(const Str& name, T value)
используется. Если вы хотите использовать handleParam(const Str& name, Table<T> value)
, вам нужно указать T = float
:
handler.handleParam<float>(param_name, tab);
Или даже
handler.handleParam(param_name, tab);
Поскольку компилятор автоматически выберет наиболее специализированную версию.
Я использовал следующий код для тестирования:
#include <iostream>
#include <vector>
class TypeHandler
{
public:
template <typename T> void handleParam(const std::string& name, std::vector<T> value)
{
std::cout << "std::vector<T>\n";
}
template <typename T> void handleParam(const std::string& name, T value)
{
std::cout << "T\n";
}
};
template<typename HandlerType>
void handleTab(const std::string& name, HandlerType& handler) {
std::vector<float> tab;
handler.handleParam(name, tab);
}
int main()
{
TypeHandler t;
handleTab("dfds", t);
return 0;
}
Если это не отражает вашу проблему должным образом, пожалуйста, объясните это в комментарии.