對於這個項目,我不能使用C++ 11,或者添加任何額外的依賴項(例如Boost)。pre-C++的std :: bind替代方案11
我試圖實現這一目標是:
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來部分應用它(一個la time_limit_parser(timeLimit)
),但我不能在這個項目中使用C++ 11。
甚至在C++ 11之前,TR1已經提供了'std :: tr1 :: bind'。這對你有用嗎?如果沒有,那麼即使你不能添加對Boost的依賴,你也可以將Boost的實現複製到你自己的項目中。 – hvd