LINUX.ORG.RU

Перегрузка функций в С++?


0

0

Страуструп утверждает что (стр 387): «Если аргументы функции шаблона были определены путем выведения по фактическим аргментам шаблона, к ним нельза применять продвижения, стандартные и определяемые пользователем преобразования.» При этом на стр 388 приведен правомерный пример:

 template<typename T> class B {...}; template<typename T> class D : public B<T> {...};
template<typename T> void f(B<T>*);
void g(B<int>* pb, D<int>* pd) { f(pb); f(pd); }
но в f(pd) применены стандартные преобразования в указатель на базовый класс! Так какие все же преобразования нельзя применять к аргументам функции шаблона, чьи параметры были выведены на основании типов фактических аргументов?

интересно. может имелось в виду неявные вызовы чего нить типа операторов преобразования ?

template <typename t>
class A{
    public:
        operator std::vector<t>* (){
            std::cout <<"type conversion" << std::endl;
            return 0;
        }
};

template <typename t>
void test(const std::vector<t>* _t){
    std::cout << "func" << std::endl;
}

int main(int argc, char** argv){
    A<int> a;
    //test(a); // ошибка. но для не шаблонированных функций все ок
    test((std::vector<int>*)a); // все ок
    return 0;
}

rudnykiv ()

Где они там применены? Проинстанцируются два варианта функции f.

legolegs ★★★★★ ()

Речь об аргументах шаблона, а не самой функции.

dave ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.