Как я могу использовать шаблонный класс в качестве параметров функции? - PullRequest
0 голосов
/ 03 мая 2019

Мне нужен поток с параметром класса шаблона, но я не знаю, как использовать класс шаблона в качестве параметра метода потока.

Я уже пытался создать метод в классе шаблона, но не хочуЭто.Люди обычно не используют это решение.

//....
//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 ]

3 голосов
/ 03 мая 2019

Общее решение:

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

Или вы можете специализироваться для одного конкретного типа:

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

(Также учтите, что вы, вероятно, хотите передать ссылку на список,а не копия)

1 голос
/ 03 мая 2019

Поскольку вы хотите, чтобы поток принимал шаблон, функция также должна быть шаблонной.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...