myNameSpace::functionName(this, {"abc", "abc1"}); // working fine
工作正常,但是
std::thread(myNameSpace::functionName<ClassName>(this, {"abc", "abc1"}));
//error: invalid use of void expression.
请建议我在这里缺少什么。或者怎么做。
namespace myNameSpace {
template<typename T>
void functionName(T* cm, std::initializer_list<std::string_view> args) { ... }
}
首先,这不是您启动线程的方式。您正在调用它,并将结果作为参数传递以启动线程。但是,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>
。它会更容易,更简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句