Я пытаюсь объявить функцию, которая проверяет, инициализирован ли интеллектуальный указатель. Я написал два варианта функции, которая действует на интеллектуальные указатели, одна функция шаблона действует на шаблоны, а другая действует на шаблон шаблона. Проблема в том, что последний должен действовать как минимум на std :: unique_ptr и std :: shared_ptr. Std :: unique_ptr построен иначе, чем std :: shared_ptr. std :: unique_ptr принимает два аргумента шаблона (а именно тип объекта и средство удаления), тогда как std :: shared_ptr принимает только один (а именно тип объекта).
#include <iostream>
#include <memory>
template <typename Smartpointer>
void checkPointerinitialization(const Smartpointer& ptr){
if(!ptr.get())
std::cout<<"smart pointer is not initialized\n"<<std::endl;
}
//template <template <typename, typename> class Smartpointer, typename Object, typename Deleter>
//void checkPointerinitializationWithTemplates(const Smartpointer<Object, Deleter>& ptr){
// if(!ptr.get())
// std::cout<<"smart pointer is not initialized in template function either\n"<<std::endl;
//}
//int main(){
// std::shared_ptr<int> myptr;
// checkPointerinitialization(myptr);
// checkPointerinitializationWithTemplates(myptr);
//
//}
template <template <typename> class Smartpointer, typename Object>
void checkPointerinitializationWithTemplates(const Smartpointer<Object>& ptr){
if(!ptr.get())
std::cout<<"smart pointer is not initialized in template function either\n"<<std::endl;
}
int main(){
std::shared_ptr<int> myptr;
checkPointerinitialization(myptr);
checkPointerinitializationWithTemplates(myptr);
}
Мое решение состояло в том, чтобы перегрузить функцию шаблона, однако, если я раскомментирую первую функцию, я получу ошибку вывода шаблона - сообщение об ошибке неправильного количества аргументов шаблона от g ++. Действительно ли возможно перегрузить функции шаблона соответствующим образом?
std::shared_ptr
имеет только один параметр шаблона. melpon.org/wandbox/permlink/nugnyaHklfQfBzp1 - person Danh   schedule 19.12.2016