У меня есть класс, который имеет шаблон:Функция вызова на boost :: variant независимо от типа?
template<class T = int> class slider;
Класс имеет метод void Process(void)
, поэтому, я думаю, что это должно быть отозвано regarless типа, возвращаемое значение является недействительным, и нет никаких параметров к нему.
А теперь у меня есть этот код для вызова процесса каждый кадр в моем приложении:
//class menu:
typedef boost::variant<std::shared_ptr<slider<int>>,std::shared_ptr<slider<float>>,std::shared_ptr<slider<double>>,std::shared_ptr<slider<char>>> slider_type;
std::map<std::string,slider_type> Sliders;
//buttons ... etc ...
void Process()
{
if(!Sliders.empty())
{
for(auto i = Sliders.begin(); i != Sliders.end(); ++i)
{
switch(i->second.which())
{
case 0://slider<int>
{
boost::get<std::shared_ptr<slider<int>>>(i->second)->Process();
break;
}
case 1://slider<float>
{
boost::get<std::shared_ptr<slider<float>>>(i->second)->Process();
break;
}
//.....
}
}
}
}
Можно ли выполнить процесс функции(), как показано в следующем примере?
for(auto i = Sliders.begin(); i != Sliders.end(); ++i)
{
switch(i->second.which())
{
boost::get<???Any???>(i->second)->Process();
}
}
Если да, то как?
Это звучит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem).Что вы пытаетесь сделать здесь, что хотите сделать это? И самое главное, почему вы не используете посетителя? * –