Массив указателей на темплейтную ф-цию
От: Kubyshev Andrey  
Дата: 11.09.11 06:54
Оценка:
Всем привет,

Не получается создать массив указателей на темплейтные ф-ции

Для упрощения кода хочу сделать следующее:
Сгенерировать 8 простых ф-ций и заполнить массив или вектор указателями на них:


typedef int ( t_func ) (void*);
t_trc * ptrs [8];

template <int n> int func (void * param){
    return n;
};


8 функ. я делаю просто так:


template int func <0>(void * param);
...
template int func <7>(void * param);



Теперь в идеале я хочу сделать так:


ptrs [0] = &func <0>;


Но тут много ошибок сразу..
cannot allocate an array of constant size 0
missing type specifier — int assumed. Note: C++ does not support default-int
redefinition; different type modifiers

ну и так далее.

Может тут лямбды какие нужны ? У меня VS 2008
Re: Массив указателей на темплейтную ф-цию
От: breee breee  
Дата: 11.09.11 07:11
Оценка: 4 (1)
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Не получается создать массив указателей на темплейтные ф-ции


KA>Может тут лямбды какие нужны ? У меня VS 2008


У меня на VS2008 даже без explicit instantiations работает.
#include "stdafx.h"
#include <iostream>

template <int n> int func (void * param)
{
    std::cout << n << std::endl;
    return n;
};
 
typedef int ( t_func ) (void*);
t_func * ptrs [8];

int main()
{
    ptrs[0] = &func<0>;
    ptrs[1] = &func<3>;

    (ptrs[0])(0); // prints 0
    (ptrs[1])(0); // prints 3
}
Re[2]: Массив указателей на темплейтную ф-цию
От: breee breee  
Дата: 11.09.11 07:15
Оценка: 4 (1)
BB>У меня на VS2008 даже без explicit instantiations работает.

А также на gcc (ideone.com) и comeau online (если убрать ненужную точку с зарпятой после определения func).
Re[2]: Массив указателей на темплейтную ф-цию
От: Kubyshev Andrey  
Дата: 11.09.11 07:16
Оценка:
Сорри, это я протупил,

ptrs[0] = &func<0>;

Писал не в теле main
Ваще блин...
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.