带有 std::thread 的 std::initializer_list

萨希卜·亚尔
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有std :: initializer_list的奇怪行为constexpr

std :: initializer_list的实现

std :: initializer_list的实现

具有多种类型的std :: initializer_list

C ++-std :: initializer_list与std :: span

带有许多用于测试的元素的长 std::initializer_list

如何使用带有std :: initializer_list的构造函数设计类?

从std :: array私有继承时,无法从std :: initializer_list构造

std :: initializer_list可以专用吗?

C ++ std :: initializer_list用法

std :: initializer_list和引用类型

std :: initializer_list构造函数

在clang中返回std :: initializer_list

自动功能中带有std :: initializer_list <int>且不带const的==测试的C ++ 1z处理

无法从std :: initializer_list <int>构造std :: initializer_list <int const>

有没有办法从`std :: initializer_list`创建用户定义的文字?

std :: strings的std :: initializer_list的奇怪行为

为什么 ctor 中的 std::initializer_list 没有按预期运行?

如何检查类型'T'是否具有'T(std :: initializer_list <U>)'构造函数

为什么`std :: initializer_list`没有定义为文字类型?

带有 std::thread 的计时器

为什么Clang无法优化std :: initializer_list?

使用std :: initializer_list构造函数而不会产生歧义?

是否可以以编程方式构造std :: initializer_list?

检查元素是否在std :: initializer_list中

做std :: initializer_list const会改变什么吗?

构造函数中的std :: initializer_list转换

为什么std :: initializer_list不是内置语言?

Visual Studio中的std :: initializer_list模糊性