Вы, конечно, можете создать такой вектор.
#include <vector>
#include <functional>
#include <iostream>
struct MyClass
{
int a() { return 1; }
int b() { return 2; }
};
int main()
{
std::vector<std::mem_fun_t<int, MyClass> > vec;
vec.push_back(std::mem_fun(&MyClass::a));
vec.push_back(std::mem_fun(&MyClass::b));
MyClass x;
for (size_t i = 0; i != vec.size(); ++i) {
std::cout << vec[i](&x) << '\n';
}
}
Если у вас возникли проблемы, внимательно прочитайте сообщение об ошибке.Например, std::mem_fun
может возвращать всевозможные обертки, в зависимости от того, что вы ему передаете.
Или действительно, переключитесь на boost или C ++ 0x function
.
Редактировать: С этим конкретным сообщением об ошибке я предполагаю, что вы делаете что-то, что вызывает конструктор по умолчанию для содержащегося типа (например, resize
или указание размера с помощью конструктора вектора).Вы не можете использовать эти функции.