根据类C++运行代码

Ahm*_*aya -2 c++ oop templates vector c++11

我正在尝试根据模板类型T传递的类来运行不同的代码.
我有2个班级:MediaCustomer.
我有一个模板T和一个功能add(T type).

我希望它能够有效地识别传递哪个类T,并将该类型添加到数组中,如下所示.

template <typename T>
void add(T type){

    if(type = Customer) { // This is pseudo code of what I want it to do

        allCustomers.push_back(type);
        cout << "Added Successfully";

    }

    else if (type = Media){
        allMedia.push_back(type);
        cout << "Added Successfully";
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我试图传递它的方式:

add(Media("test","test")); 
Run Code Online (Sandbox Code Playgroud)

Kla*_*aus 6

如果您有两种已知类型,则无需将其设为模板.

你可以拥有:

void add( Customer c );
void add( Media m );
Run Code Online (Sandbox Code Playgroud)


πάν*_*ῥεῖ 6

if() else if()您的代码中的语句存在问题

allCustomers.push_back(type);
Run Code Online (Sandbox Code Playgroud)

会给你一个类型的编译器错误Media(假设allCustomers是a std::vector<Customer>),反之亦然类型Customer

allMedia.push_back(type);
Run Code Online (Sandbox Code Playgroud)

您可以简单地使用函数重载来执行此操作:

void add(const Customer& type){
    allCustomers.push_back(type);
    cout << "Added Successfully";

}

void add(const Media& type){
    allMedia.push_back(type);
    cout << "Added Successfully";
}
Run Code Online (Sandbox Code Playgroud)

如果您有其他类型的通用模板实现Customer,Media您也可以使用模板专业化:

template<typename T>
void add(const T& type){
    anyTypes.push_back(type);
    cout << "Added Successfully";

}

template<>
void add(const Customer& type){
    allCustomers.push_back(type);
    cout << "Added Successfully";

}

template<>
void add(const Media& type){
    allMedia.push_back(type);
    cout << "Added Successfully";
}
Run Code Online (Sandbox Code Playgroud)