在类构造函数中,定义T类型的向量

时间:2019-01-03 04:24:01

标签: c++ c++11 templates vector

我已经可以在public:头中定义具有固定参数类型的函数指针向量,然后在构造函数中对其进行更新。但是,如果我希望能够传递带有任何类型参数的函数指针向量,那么在构造函数更新它之前如何定义它?

#include <iostream>
#include <vector>

class foo {
public:
    std::vector<void (*)(int)> functions;

    foo(std::vector<void (*)(int)> x) {
        functions=x;
    }

    void run() {
        functions[0](2);
    }
};

void square(int n) { std::cout << n*n; }

int main() {
    foo* bar=new foo(std::vector<void (*)(int)>{square});
    bar->run();
    return 0;
}

现在,如何将向量传递给任何类型的构造函数?

//snippet from above
std::vector<void (*)()> functions; //what do i do here?

template <typename T>   
foo(std::vector<void (*)(T)> x) { //this works fine
    functions=x;
}

1 个答案:

答案 0 :(得分:3)

您可以将班级改为班级模板

template<class T>
class foo {
public:
    std::vector<void (*)(T)> functions;
    foo(std::vector<void (*)(T)> x) : functions(x)
    { }
    ...
}

foo<int>* bar=new foo(std::vector<void (*)(int)>{square});

我还建议您从函数指针切换到std::function,并且不要使用原始指针。使用std::unique_ptr或其表亲之一。