2015-08-19 5 views
-1

Я хотел использовать шаблон функции (ы) ссылки через свой указатель, используя указатель на функцию, которая доступна внутри структуры, какшаблон функции на указатель функции внутри структуры

typedef struct arithmeticfunc { 
      string funcName; 
      int (*funPtr)(int,int); 
}; 

Например:

int add(int a, int b) 
    return (a+b); 

int sub(int a, int b) 
    return (a-b); 

arithmeticfunc func[2] = { {"ADDITION", &add}, 
          {"SUBTRACT", &sub} }; 

for(int i = 0; i < 2; i++) { 
    printf("Result of Function : %s is %d",func[i].funcName.c_str(),func[i]->funcPtr(2,1)); 
} 

Теперь мне нужно использовать функцию шаблона вместо обычной статической функции.

Пожалуйста, дайте мне знать, я делаю правильный метод.

+2

Слишком неопределенный. –

+0

Что вы пытались сделать своими шаблонами структур и функций? Где ты застрял с этим? Пожалуйста, отредактируйте свой вопрос и покажите как образец, и точные сообщения об ошибках. –

+0

В случае, если вы этого не осознали, большая часть основных функций, которые вы пытаетесь реализовать (связать имя с функцией), уже предоставляется с помощью 'std :: map' /' std :: unordered_map'. –

ответ

0

Если я понимаю ваш вопрос, вы хотите, чтобы ваш struct и функции были шаблонами?

template <typename T> 
struct arithmeticfunc 
{ 
    std::string funcName; 
    T (*funPtr)(T, T); 
}; 

template <typename T> 
T add(T a, T b) 
{ 
    return a+b; 
} 

template <typename T> 
T sub(T a, T b) 
{ 
    return a-b; 
} 

Затем вы можете использовать их следующим образом

int main() 
{ 
    arithmeticfunc<int> func[2] = { {"ADDITION", &add}, 
            {"SUBTRACT", &sub} }; 

    for(int i = 0; i < 2; i++) 
    { 
     std::cout << "Result of Function : " 
        << func[i].funcName 
        << " is " 
        << func[i].funPtr(2,1) 
        << std::endl; 
    } 
} 

Обратите внимание, что вы больше не можете использовать код формата %d если вы используете шаблоны, так как тип T не может быть целым числом, то может быть double и т. д.

+0

Спасибо. Мне нужно знать, какие изменения мне нужно пройти, если я переведу все функции шаблона в отдельный файл заголовка (скажем, tempFunc.h) и определим arthimeticfunc над main()? .. Я попытался таким образом и не получил действительных указатель для функции 'add' – kar

+0

нужно ли нам использовать и добавлять только добавить .. он отлично работает для обоих !! – kar