我可以直接调用operator()而无需创建临时对象吗?

nsi*_*akr 2 c++ boost stl

我有以下实用程序函数将给定的字符串转换为整数.

class convertToInt:public std::unary_function<const char*, int>
{

        public:
                int operator()(const char* cNumber)
                {
                        try
                        {
                                int result = boost::lexical_cast<int>(cNumber);
                                return result;
                        } catch ( boost::bad_lexical_cast& error)
                        {
                                std::cerr << "Error in converting to number "<< error.what() << std::endl;
                                return -1;
                        }
                }

};
Run Code Online (Sandbox Code Playgroud)

当我想实际使用这个实用功能时,我要做以下事情.

  convertToInt cStrToInt;
  int iNumberToCheck = cStrToInt(argv[1]);
Run Code Online (Sandbox Code Playgroud)

我只是想知道,有没有办法,我可以直接打电话

int iNumberToCheck = convertToInt(argv[1]);
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 5

不,它是一个成员函数,需要一个对象来调用它.你可以使用一个未命名的临时代替:

int iNumberToCheck = convertToInt()(argv[1]);
Run Code Online (Sandbox Code Playgroud)

  • 您可能想要提及临时对象的成本为0且启用了温和优化.由于临时没有状态,编译器将优化掉实例. (4认同)