Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение типа параметра функции 
V
    Опции темы
tilin
Дата 24.10.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.9.2008

Репутация: нет
Всего: нет



Можно ли как-то в VC2005 определить во время компиляции какой тип имеют параметры функции, чтобы потом использовать этот тип при специализации шаблона. Естественно определить автоматически, а не посмотреть и ручками прописать.
PM MAIL   Вверх
Earnest
Дата 25.10.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Можно - используя соответствующие шаблоны. Например из boost. Ты бы задачу поконкретнее поставил, тогда глядишь что дельное и присоветуют. Кстати, компилятор здесь не при чем. Перенесу-ка в Общие вопросы, там больше шансов получить совет по шаблонам. Но задачу все же сформулируй.


--------------------
...
PM   Вверх
tilin
Дата 25.10.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.9.2008

Репутация: нет
Всего: нет



Требуется Call(объект, метод, параметр, параметр,...) представить в виде объекта содержащего вызов у которого есть функция которая этот вызов производит. Т.е. надо чтобы типы параметров и возвращаемого значения при формировании объекта содержащего вызов определялись автоматически на этапе компиляции.
PM MAIL   Вверх
tilin
Дата 26.10.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.9.2008

Репутация: нет
Всего: нет



Автоматически не догнал как сделать, реализовал вот так вот. Может что присоветуете? Было бы хорошо обернуть создание CallObject в макрос, но в макрос надо подставлять параметры функций, соответственно макрос должен работать с переменным числом параметров. Чтобы вместо 
Код

CallObject<A, A::TFunc, A::TFuncTypes, TL::Length<A::TFuncTypes>::value> co(&a, &A::Func, 10, 456);


можно было писать 
Код

CallObj(A,a,Func,10,456)


Это возможно (компилятор VC2005)?

Код

#include "loki/Typelist.h"

using namespace Loki;

template <typename T, typename D, class C, int n>
class CallObject
{
public:
    T* pObject;
    D pFunc;

    void Call()
    {
    }
};

template <typename T, typename D, typename C>
class CallObject<T,D,C,3>
{
public:
    T* pObject;
    D pFunc;

    
    typedef typename TL::TypeAt<C, 0>::Result Tres;
    typedef typename TL::TypeAt<C, 1>::Result Tp1;
    typedef typename TL::TypeAt<C, 2>::Result Tp2;

    Tres result;
    Tp1 p1;
    Tp2 p2;

    CallObject(T* _pObject, D _pFunc, Tp1 _p1, Tp2 _p2)
        :    pObject(_pObject), pFunc(_pFunc), p1(_p1), p2(_p2)
    {
        
    }

    void Call()
    {
        result = (pObject->*pFunc)(p1, p2);
    }
};

class A
{
public:
    typedef int (A::*TFunc)(int, float);
    typedef TL::MakeTypelist<int, int, float>::Result TFuncTypes;
    int Func(int d, float f)
    {
        return 5;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;

    CallObject<A, A::TFunc, A::TFuncTypes, TL::Length<A::TFuncTypes>::value> co(&a, &A::Func, 10, 456);
    co.Call();



    return 0;
}




Это сообщение отредактировал(а) tilin - 26.10.2009, 13:29
PM MAIL   Вверх
xvr
Дата 26.10.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Смотри в boost::function, там есть нечто подобное

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.