Re: функтор как указатель на функцию
От: brovushkin Украина  
Дата: 24.04.08 20:21
Оценка:
// Если число масок ограничено, то можно попытаться сделать наподобие этого примера
// пример использования scandir взят из man scandir
// strcmp заменить на fnmatch
// test1.cpp
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <stdlib.h>

struct Mask1
{
        static const char *name()
        {
                return "test1.cpp";
        }
};

struct Mask2
{
        static const char *name()
        {
                return "test2.cpp";
        }
};

template<class M>
struct FnMacher
{
        static int filter(const struct dirent *entry)
        {
                const char *name = entry->d_name;
                int r = strcmp(name, M::name());

                return (r == 0);
        }
};

int main()
{
        struct dirent **namelist;
        int n = scandir(".", &namelist, &FnMacher<Mask1>::filter, 0);

        if (n < 0)
           perror("scandir");
        else 
        {
           while (n--) 
           {
                   printf("Mask1: %s\n", namelist[n]->d_name);
                   free(namelist[n]);
           }

           free(namelist);
        }

        n = scandir(".", &namelist, &FnMacher<Mask2>::filter, 0);

        if (n < 0)
           perror("scandir");
        else 
        {
           while (n--) 
           {
                   printf("Mask2: %s\n", namelist[n]->d_name);
                   free(namelist[n]);
           }

           free(namelist);
        }

        return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.