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

Специализация nested template class - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ поменят местами элементи массива http://www.cyberforum.ru/cpp-beginners/thread943078.html
составить программу, которая меняет местами два любих элементи двумерного массива
C++ Из двух в один Существует два файла .cpp //Первый файл #include <iostream> #include <locale> using namespace std; int r_avg(int i); void reset; http://www.cyberforum.ru/cpp-beginners/thread943048.html
Класс Person C++
Добрый день, форумчане. Решал задание из книги С.Прата, №2 из главы 10. Пусть имеется определение простого класса в нем используется объект string и символьный массив. Напишите программу, которая дополнит реализацию за счет предоставления кода для пока еще не определенных методов. В программе, использующей класс, должны также присутствовать вызовы трех возможных конструкторов (без аргументов, с...
C++ Создание двумерного динамического массива
У Хортона А. - Visual C++ 2005 написано как создавать динамические массивы таким способом: Выделение памяти в свободном хранилище для многомерного массива предполагает использование new в несколько более сложной форме, чем для одномерного массива. Если предположить, что у вас уже есть соответствующим образом указатель pbeans, то получение пространства памяти для массива beans, с которым вы...
C++ Не могу объявить массив внутри main - ошибка при линковке http://www.cyberforum.ru/cpp-beginners/thread943029.html
Доброго времени суток! Я начинающий в С++. Использую gcc в Ubuntu 13.04 x64 bit. Прохожу сейчас массивы. Заметил одну странность. При попытке одновременного объвления - массива внутри main - и использования printf() при компиляции выходит ошибка, я как понял линковщика, следующего содержания: /tmp/ccXzvblP.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
C++ toupper, tolower, strlen и кириллица Эти три функции не хотят нормально работать с кириллицей. Если им скормить американские литеры, все нормально. Но вот, например, эта программа печатает "тест", а по-идее должна "ТЕСТ". // Преобразование строчных символов в заглавные. #include <iostream> #include <cstring> #include <cctype> using namespace std; int main() подробнее

Показать сообщение отдельно
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
24.08.2013, 18:13     Специализация nested template class
Всем доброго дня.
Сделал частичную развертку циклов с помощью шаблонов. Однако, если вспомогательную структуру inner_unroller сделать nested для главного класса-унроллера, то компилятор ругается - nested class является шаблонным и специализируется внутри главного класса:
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
template<size_t idx_start, size_t idx_end>
class partial_unroller//Главный класс - "частичный развертыватель"
{
public:
    template<typename Functor>
    static void process(Functor functor) 
    {
        auto i = idx_start;
        for (; i < idx_end; i += 8) 
            inner_unroller<>::process_(functor, i);
    }
    
private:
    template<size_t start = 0>
    struct inner_unroller//Вспомогательная структура для развертки внутри итерации - частично специализируется
    {
        template<typename Functor>
        static void process_(Functor functor, size_t i) 
        {
            functor(i + start);
            inner_unroller<start + 4>::process_(functor, i);
        }
    };
    template<>
    struct inner_unroller<8> 
    {
        template<typename Functor>
        static void process_(Functor functor, size_t i) { }
    };
};
Если объявление и реализацию inner_unroller вынести за пределы partial_unroller, то все нормально работает. Однако, хорошо бы сделать именно nested-реализацию, поскольку эту дает некоторые преимущества в виде доступа к шаблонным параметрам главного класса. Конечно, проблему доступа к параметрам можно решить с помощью #define, однако хочется более красиво все сделать, если это возможно. Не подскажете как здесь быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru