如何使用模板类作为函数的参数?

时间:2019-05-03 05:49:35

标签: c++ templates

我想使用模板类参数进行线程化,但是我不知道如何使用模板类作为线程方法的参数。

我已经尝试过在模板类中制作方法,但是我不想要它。人们通常不使用此解决方案。

//....
//Linked List code
//.....


void func1(slist<T> s){
    for (int i = 0; i < 1000; i++) {
        s.push_(i);
    }
}                      // this part is problem of my code.

int main() {
    int i;
    slist<int> s;
    thread t1(func1,s); //Compile error.
        func1(s);   // here, too.

    return 0;
}

我希望线程与链表竞争的结果。

2 个答案:

答案 0 :(得分:3)

通用解决方案:

 Await (CType(user, SocketGuildUser)).AddRoleAsync(role)

或者您可以专门研究一种特定类型:

template<typename T>
void func1(slist<T>& s){
    for (int i = 0; i < 1000; i++) {
        s.push_(i);
    }
} 

(还请注意,您可能希望传递对列表的引用,而不是副本)

答案 1 :(得分:1)

当您想让线程接受模板时,该函数也应该被模板化。

template <typename T>
void func1(slist<T> s){        // most likely you need to pass by reference
    for (int i = 0; i < 1000; i++) {
        s.push_(i);
    }
}

在main中调用函数时,

int main() {
    int i;
    slist<int> s;
    thread t1(func1<int>,s); //t1 needs to know which type it needs to instantiate of func1
    t1.join(); // let the thread finish

    return 0;
}