вопрос является своего рода трудно спросить без примера, так вот оно:Typedef эквивалентности аргументов функции
#include <vector>
struct O
{
};
struct C
{
template <typename T>
void function1(void (C::*callback)(const O*));
template <typename T>
void function2(void (C::*callback)(const typename T::value_type));
void print(const O*);
};
int main()
{
C c;
c.function1< std::vector<O*> >(&C::print); // Success.
c.function2< std::vector<O*> >(&C::print); // Fail.
}
ошибка, что я даюсь это:
error: no matching function for call to ‘C::function2(void (C::*)(const O*))’
.
В принципе, единственное различие между вызовами является то, что в function2
, я более общий характер, так как я использую ЬурейеЕ std::vector<O*>::value_type
который должен решить для O*
, следовательно, подобный function1
.
Я использую G ++ 4.2.1 (я знаю, что он старый), но Комо подтверждает, что я неправ.
Почему компиляция не удалась?
О, я начинаю думать, что 'const typename T :: value_type' не разрешает' const O * ', а' O * const'. Как я могу достичь того, чего хочу? –
Точно. Используйте свойства, чтобы добавить константу. –