模板和多线程的 C++ 错误 3867

C++ Error 3867 with templates and multi-threading

我在网络上和本网站上阅读了一些讨论,而且我没能理解我的错误。我有一个名为 BlockingQueue 的特定队列,带有模板:

template <typename T, int size>
class BlockingQueue
{

public:
//constructor and other methods
void inserisci(T val) {
//do work
};

private:
queue <T> fifo;
atomic<boolean> isClosed;
mutex m;
};

我主要写了以下几行:

BlockingQueue<int, 5> bq;
int k=8;
thread t(bq.inserisci, k);
t.join();
return 0;

编译时,我得到这个错误:

Error C3867: 'BlockingQueue::inserisci': function call missing argument list; use '&BlockingQueue::inserisci' to create a pointer to member

我看了Visual Studio的建议,所以我试着做一个函数指针,但是效果不一样。

正确的代码如下所示:

typedef BlockingQueue<int, 5> BQ5;
BQ5 bq;
int k=8;
thread t(std::bind(&BD5::inserisci, &bq, k));
t.join();
return 0;