0

このプロジェクトでは、C++11 を使用したり、追加の依存関係 (Boost など) を追加したりすることはできません。

私が達成しようとしているのはこれです:

typedef void (*processorFunction)(int numItems, std::string* items);

class Files
{
public:
    Files() : m_KVSeparator('='), m_ListSeparator(',') {}
    ~Files() {}

    void ReadDataFile(std::string filename, std::map<std::string, processorFunction> processorFunctions);

    char m_KVSeparator;
    char m_ListSeparator;
};

void Files::ReadDataFile(std::string filename, std::map<std::string, processorFunction> processorFunctions)
{
    // The file parsing and choosing of the function omitted for brevity:
    processorFunction processor = ...;
    int numItems = ...;
    std::string* items = ...;

    processor(numItems, items);
}

// Example parser:
void time_limit_parser(int& timeLimit, int numItems, std::string* items)
{
    timeLimit = atoi(items[0].c_str());
}

int main()
{
    // Omitted getting the global file manager pointer
    Files* files = ...;
    std::map<std::string, processorFunction> configProcessorFunctions;
    int timeLimit;
    // ****** WHAT GOES HERE? ******
    files->ReadDataFile("config.dat", configProcessorFunctions);
}

私の質問は、何を****** WHAT GOES HERE? ******ラインに入れるかです。std::bind を使用して部分的に適用しますが (a la time_limit_parser(timeLimit))、このプロジェクトでは C++11 を使用できません。

4

1 に答える 1