我目前正在尝试创建一个包含类函数的 vector 。
这是我的代码:
typedef leap::float64 (DataReader::*getFonction)();
std::vector<getFonction> vec;
std::vector<getFonction>::iterator it;
vec.push_back(&DataReader::getLa);
vec.push_back(&DataReader::getLon);
for(it = vec.begin(); it<vec.end(); it++)
std::cout << *it << std::endl;
函数“get ...”(不是静态的)返回值存储在共享资源上并且已经初始化。 但是,他们只返回值“1”。
一个想法?
最佳答案
当您取消引用 it
并输出它时,您只是打印出函数指针的表示,它被隐式转换为 bool
并输出为 1
因为它不为空。
如果要调用函数并输出返回值,需要在实例上调用:
DataReader reader;
for(it = vec.begin(); it<vec.end(); it++)
//dereference it to get member function pointer and call it on reader
std::cout << (reader.*(*it))() << std::endl;
如果您使用的是 C++11,std::function
可能更适合:
using getFunction = std::function<leap::float64(DataReader&)>;
std::vector<getFunction> vec;
std::vector<getFunction>::iterator it;
vec.emplace_back(&DataReader::getLa);
vec.emplace_back(&DataReader::getLon);
DataReader reader;
for(it = vec.begin(); it<vec.end(); it++)
std::cout << (*it)(reader) << std::endl;
关于c++ - 包含类函数的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989894/