在c+中创建+;类型未知的模板向量(无效模板) < P>我有一个C++模板类,它包含一个方法指针和一个类指针,谁有一个方法,即代码>调用< /代码>,它调用类指针上的方法指针。

在c+中创建+;类型未知的模板向量(无效模板) < P>我有一个C++模板类,它包含一个方法指针和一个类指针,谁有一个方法,即代码>调用< /代码>,它调用类指针上的方法指针。,c++,templates,C++,Templates,此模板称为方法,C是类和方法指针的类 我想创建此模板的数组(std::vector),但我希望此向量能够包含此模板的不同类。我的最终目标是遍历这个向量并调用每个元素的call方法,即使它们有不同的类 您将如何做到这一点?如果所有方法都具有相同的签名(关于输入参数和返回类型),那么您可以将它们包装在std::function对象中,并将它们存储在向量中。不管是哪种方式,听起来您都需要将类包装成某种多态类型(或者从一个公共的、非模板化的基派生它们——但之后您将重新发明std::function) 这

此模板称为
方法
,C是类和方法指针的类

我想创建此模板的数组(
std::vector
),但我希望此向量能够包含此模板的不同类。我的最终目标是遍历这个向量并调用每个元素的
call
方法,即使它们有不同的类


您将如何做到这一点?

如果所有方法都具有相同的签名(关于输入参数和返回类型),那么您可以将它们包装在
std::function
对象中,并将它们存储在向量中。不管是哪种方式,听起来您都需要将类包装成某种多态类型(或者从一个公共的、非模板化的基派生它们——但之后您将重新发明
std::function


这里的底线是,不能使
std::vector
存储异构类型。

如果所有方法都具有相同的签名(关于输入参数和返回类型),则可以将它们包装在
std::function
对象中,并将其存储在向量中。不管是哪种方式,听起来您都需要将类包装成某种多态类型(或者从一个公共的、非模板化的基派生它们——但之后您将重新发明
std::function


这里的底线是,
std::vector
不能用于存储异构类型。

您不能在
vector
中存储
模板
,只能存储具有
类型的
对象
。而
模板
在实例化时变为
类型

所以,你不能完全做你想做的事

我建议您使用
函数
绑定
。请参见一个示例:

struct A
{
    void call()
    {
        std::cout << "hello";
    }

};  

int main()
{
    std::vector <std::function<void()>> v;
    v.push_back(std::bind(&A::call, A()));
    for (auto it = v.begin(); it != v.end(); ++it) {
        (*it)();
    }

    return 0;
}
结构A { 无效调用() {
std::cout您不能将
模板
存储在
向量
中,只有
对象
具有
类型
模板
在实例化时变为
类型

所以,你不能完全做你想做的事

我建议您使用
函数
绑定
。请参见示例:

struct A
{
    void call()
    {
        std::cout << "hello";
    }

};  

int main()
{
    std::vector <std::function<void()>> v;
    v.push_back(std::bind(&A::call, A()));
    for (auto it = v.begin(); it != v.end(); ++it) {
        (*it)();
    }

    return 0;
}
结构A { 无效调用() { 标准::cout