Во-первых, это не то, как вы запускаете поток. Вы вызываете его и передаете результат в качестве аргумента для запуска потока. Но void
не является допустимым аргументом для запуска потока и не является каким-либо полезным выражением в каком-либо смысле.
Вместо этого вы бы написали что-то вроде этого:
std::thread(&myNameSpace::functionName<ClassName>, this, {"abc", "abc1"});
Ваша следующая проблема в том, что в языке нет возможности для компилятора определить, что вы подразумеваете под {"abc", "abc1"}
. С прямым вызовом функции к functionName
он может сработать, потому что механизм вызова функции знает, что представляют собой возможные перегрузки, но это не относится к этой «сломанной» конструкции.
Можно исправить это , указав тип:
std::thread(&myNameSpace::functionName<ClassName>, this, std::initializer_list<std::string_view>{"abc", "abc1"});
Однако я рекомендую просто передать (и принять) вместо std::vector<std::string_view>
. Это будет намного проще и намного проще.