【发布时间】:2014-04-20 17:45:49
【问题描述】:
对于这个项目,我不能使用 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 来部分应用它(比如time_limit_parser(timeLimit)),但我不能在这个项目中使用 C++11。
【问题讨论】:
-
甚至在 C++11 之前,TR1 就已经提供了
std::tr1::bind。你可以使用吗?如果没有,那么即使你不能添加对 Boost 的依赖,你也可以将 Boost 的实现复制到你自己的项目中。