Re: remove const
От: ReV01VeR  
Дата: 29.12.04 11:04
Оценка: 20 (2)
Здравствуйте, Sergey, Вы писали:

S>Hello, All!


S>Есть некий тип, заданный примерно так:

S>
S>typedef void int (func_type)(int, double) const;
S>


S>Есть ли какой-нибудь способ (я, конечно, подозреваю, что нет, но вдруг?)

S>получить из этого типа то же самое, но без константности? Потому что с
S>константностью boost::function_traits не дружат, а переписывать
S>function_traits влом.

S>With best regards, Sergey.


Работает на VC7.1:

#include <iostream>
#include <typeinfo>

typedef int (FType)(int, double) const;

class Foo;

template <typename T>
struct Unconst;

template <class T, typename R, typename A1, typename A2>
struct Unconst<R (T::*)(A1, A2) const>
{
  typedef R (Type)(A1, A2);
};
template <class T, typename R, typename A1, typename A2>
struct Unconst<R (T::*)(A1, A2)>
{
  typedef R (Type)(A1, A2);
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << "FuncType:      " << typeid(FType).name() << std::endl;
    std::cout << "MembType:      " << typeid(FType Foo::*).name() << std::endl;
    std::cout << "Unconsted:     " << typeid(Unconst<FType Foo::*>::Type).name() << std::endl;
    std::cout << "MembUnconsted: " << typeid(Unconst<FType Foo::*>::Type Foo::*).name() << std::endl;
    std::cin.get();
    return 0;
}


Только специализации на каждое количество аргументов писать придется ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.