Здравствуйте, 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;
}
Только специализации на каждое количество аргументов писать придется ...