шаблон функции в качестве аргумента функции

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

template<typename T_val> struct SORT_DATA
{
T_val value;                     //
int index;
};

template<typename T_var>
bool ccmp(SORT_DATA<T_var> & var_a, SORT_DATA<T_var> & var_b)
{
return var_a.value < var_b.value;
}

В main () я использую структурную переменную и передаю ccmp () в качестве аргумента в C ++ sort (), как показано ниже.

//SORT_DATA<double> * data1 = new SORT_DATA<double>[15];
SORT_DATA<double> data1[15];

double tmp_data[15] = {25, 23, 1, 32, 0, 43, 98, 8, 7, 11, 34, 52, 32, -53, 6};

for(int i=0; i<15; i++)
{
data1[i].value = tmp_data[i];
data1[i].index = i;
}

//sort(data1, data1+15, ccmp);

for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].value<<"   ";

std::cout<<std::endl;

for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].index<<"   ";

У меня есть несколько проблем:
1. Кажется, что память не удалось выделить для структурной переменной.
2. Я получил сообщение об ошибке от VS2010 о том, что шаблон функции нельзя использовать в качестве аргумента функции.

#pragma once

#include <iostream>
#include <iomanip>
#include <algorithm>
#include "customizedalg.h"  // This is simply the declaration of the struct and bool cmp().using namespace std;int main(int argc, char ** argv)
{

SORT_DATA<double> * data1 = new SORT_DATA<double>[15];
//SORT_DATA<double> data1[15];

double tmp_data[15] = {25, 23, 1, 32, 0, 43, 98, 8, 7, 11, 34, 52, 32, -53, 6};

for(int i=0; i<15; i++)
{
data1[i].value = tmp_data[i];
data1[i].index = i;
}

sort(data1, data1+15, ccmp<double>);

for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].value<<"   ";

std::cout<<std::endl;

for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].index<<"   ";

std::cout<<std::endl;

std::cin.ignore();

return 0;
}

0

Решение

Вам следует указать шаблон из ccmp функция, как прокомментировал Петр, но вам не нужно брать адрес функции:


std::sort(data1, data1+15, ccmp<double>);

Вот рабочий образец

И если ваш компилятор не использует шаблонную функцию, вы можете попробовать создать структуру с перегруженным оператором ():

template<typename T_var>
struct ccmp
{
bool operator()(SORT_DATA<T_var> & var_a, SORT_DATA<T_var> & var_b) const
{
return var_a.value < var_b.value;
}
};
...
std::sort(data1, data1+15, ccmp<double>());

Образец

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]