我想在不声明新变量的情况下创建一个初始化容器(如矢量或列表)?
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net40;netstandard1.3;netstandard2.0</TargetFrameworks>
<!-- ... -->
<Configurations>Debug;Release;Installer</Configurations>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)'=='net40' ">
<!-- ... -->
<PackageReference Include="docfx.console" Version="2.30.0" Condition="'$(Configuration)|$(Platform)'=='Installer|AnyCPU'" />
</ItemGroup>
<!-- ... -->
</Project>
相反,我喜欢这样的事情:
std::vector<int> v;
v.push_back(1);
tbb::parallel_do(v, lambda);
答案 0 :(得分:3)
tbb::parallel_do
是一个模板,第一个参数是裸模板参数。结合{1}
不是表达式而没有类型的事实,没有办法推导出模板参数,因此这是不可能的。
但是,std::vector
有一个构造函数采用std::initializer_list
,这意味着您可以使用元素列表直接初始化向量。这反过来意味着你可以写:
tbb::parallel_do(std::vector{1}, lambda);
临时向量将包含您在原始示例中添加的唯一元素。大多数容器支持这种初始化,所以对于大多数容器你应该没问题。如果由于某种原因你想要的那个没有,你可以创建一个帮助你的功能。
答案 1 :(得分:2)
您可以使用std::vector
's constructor的以下重载。
explicit vector( size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());
以下是如何使用它。
tbb::parallel_do(std::vector<int>(1, 1), lambda);