gray_fox
What a waste!
|
||||||
#1 | ||||||
Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++13.05.2013, 09:43. Просмотров 616. Ответов 2
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры параметризованного шаблона: на стеке - ок, в куче - ок, но когда используем std::[unique/shared]_ptr - получаем ошибку компиляции от куда то из недр std::tuple - "нельзя объявить поле абстрактного типа". gcc-4.7.2 .
код
ошибки
Код
In file included from prog.cpp:1:0: /usr/include/c++/4.7/tuple: In instantiation of ‘struct std::_Head_base<0u, abstract, false>’: /usr/include/c++/4.7/tuple:215:12: required from ‘struct std::_Tuple_impl<0u, abstract>’ /usr/include/c++/4.7/tuple:374:11: required from ‘class std::tuple<abstract>’ /usr/include/c++/4.7/tuple:744:35: required from ‘constexpr typename std::__add_ref<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::type std::get(std::tuple<_Elements ...>&) [with unsigned int __i = 0u; _Elements = {holder<std::tuple<abstract> >*, std::default_delete<holder<std::tuple<abstract> > >}; typename std::__add_ref<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::type = holder<std::tuple<abstract> >*&]’ /usr/include/c++/4.7/bits/unique_ptr.h:171:32: required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = holder<std::tuple<abstract> >; _Dp = std::default_delete<holder<std::tuple<abstract> > >]’ prog.cpp:28:49: required from here /usr/include/c++/4.7/tuple:166:13: error: cannot declare field ‘std::_Head_base<0u, abstract, false>::_M_head_impl’ to be of abstract type ‘abstract’ prog.cpp:9:8: note: because the following virtual functions are pure within ‘abstract’: prog.cpp:14:1: note: virtual abstract::~abstract() Я не могу понять, в чём конкретно причина, видимо где то создаётся экземпляр кортежа. Так и должно быть?
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
13.05.2013, 09:43 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Кортеж с абстрактным типом как параметр шаблона + smart_ptr (C++):
2
Передача функции как параметр шаблона - C++
Указатель на статический массив как параметр шаблона - C++ Зачем нужен шаблон как параметр шаблона? - C++ Передать шаблонный класс, как параметр шаблона - C++ |
gray_fox
What a waste!
|
||||||
13.05.2013, 21:26 [ТС] | #3 | |||||
Странно. Вот так, например, всё нормально:
0
|
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
13.05.2013, 21:26 |
Привет! Вот еще темы с ответами:
3
Параметр шаблона класса как собственный тип данных - C++ Ссылка как параметр шаблона. Что это значит? - C++
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |