Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выдает ошибку http://www.cyberforum.ru/cpp-beginners/thread863193.html
Есть алгоритм для бинарного поиска: #include "stdafx.h" #include <iostream> using namespace std; int main() {setlocale(LC_ALL,"Rus"); const float sr_ros=165; const int y=20; int i=0, x=0, k=0;...
C++ Блок-схемы (Построить последовательность всех простых делителей заданного числа) 1.Построить последовательность всех простых делителей заданного числа и для всех элементов этой последовательности построить все возможные перестановки. 2.Выполнить сортировку одномерного массива... http://www.cyberforum.ru/cpp-beginners/thread863177.html
Нажатие кнопки при задержке на ней курсора C++
Доброго времени суток! Есть кнопка, как сделать нажатие на ней, если на ней задержался курсор, например на 3 секунды?
Как лучше найти последнее вхождение символа в std::wstring? C++
Как лучше найти последнее вхождение символа в std::wstring?
C++ Найти минимальный элемент массива, и поменять местами с первым http://www.cyberforum.ru/cpp-beginners/thread863150.html
вроде как минимальный елемент находит , но менять местами с 1 не хочет ( помогите дописать #include <math.h> #include <conio.h> #include <iostream.h> //------------------------------ float...
C++ Создание дерева С++! Здравствуйте. Вот имеется задание на курсовую - сделать программу, делающую обход дерева, обход на заданную глубину и поиск в нем. Решил начать с самого простого и сразу наткнулся на проблему - как... подробнее

Показать сообщение отдельно
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++

13.05.2013, 09:43. Просмотров 585. Ответов 2
Метки (Все метки)

Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры параметризованного шаблона: на стеке - ок, в куче - ок, но когда используем std::[unique/shared]_ptr - получаем ошибку компиляции от куда то из недр std::tuple - "нельзя объявить поле абстрактного типа". gcc-4.7.2 .
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <tuple>
#include <memory>
 
 
template<typename T>
struct holder {};
 
struct abstract {
 
   virtual ~abstract() = 0;
};
 
abstract::~abstract() {}
 
 
int main() {
   using types     = std::tuple<abstract>;
   using holder_t  = holder<types>;
 
   // Ok
   holder_t local;
 
   // Ok
   new holder_t;
 
   // ?
   std::unique_ptr<holder_t> unique(new holder_t);
 
   // ?
   std::make_shared<holder_t>();
}
http://ideone.com/7Qkm2E

ошибки
Код
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru