次のシナリオを検討:C++ - コンパイルはSTDにオーバーロードされた関数を呼び出すに失敗する::スレッド
// utils.h
// utils.cpp
#include "utils.h"
void Utils::do_something(int a, std::list<int> *b) {
}
void Utils::do_something(int a, std::list<std::string> *b) {
}
を
// main.cpp
私が間違ってやっているerror: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>, int, std::list<int>*)'
任意のアイデア:私はそれをコンパイルすると
#include <thread>
#include <list>
#include "utils.h"
int main() {
std::list<int> list;
std::thread t(Utils::do_something, 17, &list);
t.join();
return 0;
}
、私は次のエラーを取得しますか? std::list<std::string>*
を取得するオーバーロード関数を追加する前に、コンパイルがうまくいっていました。
2つの 'Utils :: do_something'関数は(おおよそ)同じことをしていますか?そうでない場合は、異なる(より記述的な)関数名を使用して解決します。 –
これは私があなたに完全に同意する明白な解決策です。しかし、スレッドが多重定義された関数を受け取ることができないという文書化された問題はありますか? – SomethingSomething
コンパイラが残りのパラメータの型だけに基づいて最初のパラメータの正しいオーバーロードを推測できると期待するのは少し難しいと思われますが、誰かが標準から引用できます(またはすることができます)。興味深い質問。 –