Сообщение Re[4]: Использовать тип параметра функции в предке от 29.12.2015 12:22
Изменено 29.12.2015 12:22 szag
Здравствуйте, Warturtle, Вы писали:
W>Значит надо уточнить почему не годится. Так не вполне ясно, чего ты хочешь. Зачем там обязательно наследование от foo<bar>? Например без него все и сейчас функционирует:
[c]
template<class T>
class foo
{
public:
typedef typename BOOST_TYPEOF(&T::f) f_type; // сейчас этот тип захардкожен, поэтому все работает, но хочется гибкости
typedef typename boost::function_types::parameter_types<f_type> parameter_types;
typedef typename boost::mpl::at_c< parameter_types, 1>::type vec_type;
void dispatch() // вызывает сам класс foo когда ему это надо
{
auto v = vec[0]; // псевдокод получения значения из вектора
static_cast<T*>(this)->f(v);
}
void push(const vec_type& v)
{
vec.emplace_back(v);
}
std::vector<vec_type> vec;
};
class bar : public foo<bar> // таких классов по коду очень много, не хотелось бы их менять
{
public:
void f (int i){} // обработка значений
};
[c]
W>Значит надо уточнить почему не годится. Так не вполне ясно, чего ты хочешь. Зачем там обязательно наследование от foo<bar>? Например без него все и сейчас функционирует:
[c]
template<class T>
class foo
{
public:
typedef typename BOOST_TYPEOF(&T::f) f_type; // сейчас этот тип захардкожен, поэтому все работает, но хочется гибкости
typedef typename boost::function_types::parameter_types<f_type> parameter_types;
typedef typename boost::mpl::at_c< parameter_types, 1>::type vec_type;
void dispatch() // вызывает сам класс foo когда ему это надо
{
auto v = vec[0]; // псевдокод получения значения из вектора
static_cast<T*>(this)->f(v);
}
void push(const vec_type& v)
{
vec.emplace_back(v);
}
std::vector<vec_type> vec;
};
class bar : public foo<bar> // таких классов по коду очень много, не хотелось бы их менять
{
public:
void f (int i){} // обработка значений
};
[c]
Re[4]: Использовать тип параметра функции в предке
Здравствуйте, Warturtle, Вы писали:
W>Значит надо уточнить почему не годится. Так не вполне ясно, чего ты хочешь. Зачем там обязательно наследование от foo<bar>? Например без него все и сейчас функционирует:
W>Значит надо уточнить почему не годится. Так не вполне ясно, чего ты хочешь. Зачем там обязательно наследование от foo<bar>? Например без него все и сейчас функционирует:
template<class T>
class foo
{
public:
typedef typename BOOST_TYPEOF(&T::f) f_type; // сейчас этот тип захардкожен, поэтому все работает, но хочется гибкости
typedef typename boost::function_types::parameter_types<f_type> parameter_types;
typedef typename boost::mpl::at_c< parameter_types, 1>::type vec_type;
void dispatch() // вызывает сам класс foo когда ему это надо
{
auto v = vec[0]; // псевдокод получения значения из вектора
static_cast<T*>(this)->f(v);
}
void push(const vec_type& v)
{
vec.emplace_back(v);
}
std::vector<vec_type> vec;
};
class bar : public foo<bar> // таких классов по коду очень много, не хотелось бы их менять
{
public:
void f (int i){} // обработка значений
};