Re[3]: Использовать тип параметра функции в предке
От: Warturtle  
Дата: 29.12.15 12:09
Оценка:
Здравствуйте, szag, Вы писали:

S>Здравствуйте, Warturtle, Вы писали:


W>>Здравствуйте, szag, Вы писали:

W>>Во-первых, кажется, что typename в некоторых местах лишний, ну и "если гора не идет к Магомету, то Магомет идет к горе":
S>это понятно, но так не подходит. Если бы работал вариант, который показал я, то он бы просто идеально вписался в проект, добавивив неоходимый функционал без каких-либо изменений в остальном проекте.
Значит надо уточнить почему не годится. Так не вполне ясно, чего ты хочешь. Зачем там обязательно наследование от foo<bar>? Например без него все и сейчас функционирует:
#include <boost/function_types/function_type.hpp>
#include <boost/function_types/parameter_types.hpp>
#include <boost/function_types/function_arity.hpp>
#include <boost/typeof/std/utility.hpp>
#include <vector>
#include <stdio.h>
#include <typeinfo>

template<class T>
class foo
{
public:
    typedef typename BOOST_TYPEOF(&T::f) f_type; // error C2039: 'f': is not a member of 'bar'
    typedef typename boost::function_types::parameter_types<f_type> parameter_types;
    typedef typename boost::mpl::at_c< parameter_types, 1>::type vec_type;

    std::vector<vec_type> vec;
};

class bar 
{
    typedef foo<bar> FooT;
public:
    void f (int i)
    {
        printf("f(%d), vec_type='%s'\n", i, typeid(FooT::vec_type).name());
    }
};

int main()
{
    bar b;
    b.f(123);
    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.