Есть ли какой-нибудь способ (я, конечно, подозреваю, что нет, но вдруг?)
получить из этого типа то же самое, но без константности? Потому что с
константностью boost::function_traits не дружат, а переписывать
function_traits влом.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Hello, !
You wrote on Mon, 27 Dec 2004 11:16:56 GMT:
> а что же все-таки такое void int
Опечатка, естественно. Я сразу и не заметил.
> и является ли наличие const единственной проблемой?
Еще static не умею
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, 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 влом.
во первых void int это что-то из другого мира.
во вторых,
во вторых — const может иметь только нестатичестка ф-ция-член класса, тоесть: S>
S>typedef int (test::*func_type)(int, double) const;
S>
и в третьих, что обычный С-style cast разве не катит?
class test {
public:
int f(int, double) {
return 0;
}
int f_const(int, double) const {
return 0;
}
};
typedef int (test::*func_type)(int, double);
typedef int (test::*func_type_const)(int, double) const;
int main() {
func_type_const fc=test::f_const;
func_type fnc=(func_type)fc;
return 0;
}
Hello, yxiie!
You wrote on Mon, 27 Dec 2004 14:57:55 GMT:
S>> Есть некий тип, заданный примерно так: S>>
S>> typedef void int (func_type)(int, double) const;
S>>
S>> Есть ли какой-нибудь способ (я, конечно, подозреваю, что нет, но S>> вдруг?) получить из этого типа то же самое, но без константности? S>> Потому что с константностью boost::function_traits не дружат, а S>> переписывать function_traits влом.
y> во первых void int это что-то из другого мира.
Да, это опечатка.
y> во вторых, y> во вторых — const может иметь только нестатичестка ф-ция-член класса, y> тоесть: S>>
S>> typedef int (test::*func_type)(int, double) const;
S>>
Не совсем так. Такой код:
typedef int (func_type)(int, double) const;
вполне легален, если использовать его должным образом. Например, так:
struct A
{
func_type func;
};
Ну а с помощью твоего тайпдефа функцию-член не определишь, только указатель
на функцию-член.
y> и в третьих, что обычный С-style cast разве не катит?
У меня нет никаких указателей на функцию, которые надо кастить. Вообще
ничего кастить не надо. У меня есть func_type, определенный с помощью
typedef — мне надо из него сделать тайпдеф для функции с такой же
сигнатурой, но без константности. Который мне нужен для того, чтобы
впоследствии написать boost::function_traits<func_type_nc>::arity. Устроит
также просто возможность отличать тайпдеф на константную функцию от тайпдефа
на неконстантную.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, yxiie, Вы писали:
Y>во вторых — const может иметь только нестатичестка ф-ция-член класса, тоесть: S>>
S>>typedef int (test::*func_type)(int, double) const;
S>>
'typedef' функционального типа еще никак не запрещает использования этого типа для объявления методов класса. И такой 'typedef' запросто может включать в себя 'const' для функции, как это было сделано в оригинальном примере.
Здравствуйте, Sergey, Вы писали:
S>Есть ли какой-нибудь способ (я, конечно, подозреваю, что нет, но вдруг?) S>получить из этого типа то же самое, но без константности? Потому что с S>константностью boost::function_traits не дружат, а переписывать S>function_traits влом.
Hello, uw!
You wrote on Mon, 27 Dec 2004 18:47:21 GMT:
S>> Есть ли какой-нибудь способ (я, конечно, подозреваю, что нет, но S>> вдруг?) получить из этого типа то же самое, но без константности? S>> Потому что с константностью boost::function_traits не дружат, а S>> переписывать function_traits влом.
u> Извини за наивный вопрос. u> А так ты пробовал? u>
Здравствуйте, Sergey, Вы писали:
S>Не, так пока не пробовал. Но это ж 20 штук специализаций писать, проще тогда S>бустоводам помочь и function_traits поправить.
Hello, yxiie!
You wrote on Tue, 28 Dec 2004 11:09:32 GMT:
S>> Не, так пока не пробовал. Но это ж 20 штук специализаций писать, проще S>> тогда бустоводам помочь и function_traits поправить.
y> возьми boost::preprocessor и напиши один раз
Все равно не вижу у такого решения ни одного преимущества перед правкой
буста.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>>> Не, так пока не пробовал. Но это ж 20 штук специализаций писать, проще S>>> тогда бустоводам помочь и function_traits поправить.
y>> возьми boost::preprocessor и напиши один раз
S>Все равно не вижу у такого решения ни одного преимущества перед правкой S>буста.
легче поддерживать.
через некоторое время захотите скачать себе новую версию буста, придётся и её править, потом ещё раз и ещё.
А свой код — один раз написали, отладили и всё.
Hello, korzhik!
You wrote on Tue, 28 Dec 2004 11:49:17 GMT:
y>>> возьми boost::preprocessor и напиши один раз
S>> Все равно не вижу у такого решения ни одного преимущества перед правкой S>> буста.
k> легче поддерживать. k> через некоторое время захотите скачать себе новую версию буста, придётся k> и её править, потом ещё раз и ещё. А свой код — один раз написали, k> отладили и всё.
Да не, я ж ее если поправлю то попробую бустоводам отдать. Если не возьмут,
такая правка может просто в отдельном хедере лежать.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: remove const
От:
Аноним
Дата:
28.12.04 12:11
Оценка:
Здравствуйте, Sergey, Вы писали:
S>Такой код: S>
S>typedef int (func_type)(int, double) const;
S>
S>вполне легален, если использовать его должным образом. Например, так: S>
S>struct A
S>{
S> func_type func;
S>};
S>
Приведите, пожалуйста, небольшой пример использования struct A.
S>With best regards, Sergey.
тоже не получается — ругается, что "modifiers not allowed on nonmember
functions" (C2270). По этой же причине и function_traits в этом направлении
фиг поправишь. Кстати, кто-нибудь знает, зачем в function_traits пляски с
add_pointer и соответствующими специализациями ?
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, 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.