gpt4 book ai didi

c++ - 将模板 vector 文字作为参数传递

转载 作者:行者123 更新时间:2023-11-30 01:45:44 29 4
gpt4 key购买 nike

所以,假设我有一些函数 print:

template<typename T>
void print(std::vector<T> V)

要传递一个 vector 进行打印,我必须这样做

std::vector<int> v {1,2,3,4,5};
print(v);

而且效果很好。我想知道的是,有什么方法可以将 vector 字面量作为参数传递给函数吗?

所以我们的函数调用变成了

print({1,2,3,4,5}) 

不再需要初始化另一个临时变量?

我知道我可以使用 std::initializer_list 但我想要 vector、push_backsize、等等

那么,有没有办法通过传递 vector 文字来调用函数,或者有没有办法在函数声明(或调用)中将 initializer_list 转换为 T 类型的 vector ?

如果不可能,是否有特定原因,例如安全性?

我知道如果我指定类型我就可以做到,比如

void print(std::vector<int> V);
print({1,2,3,4});

但为什么不也用于模板呢?看起来这几乎是相同的过程。

最佳答案

您可以很容易地从初始化列表中创建一个 vector :

template <class T>
void print(std::initializer_list<T> L)
{
std::vector<T> V(L);
// ...
}

[Live example]

当然,您也可以在实际拥有 std::vector 的情况下重载手边:

template <class T>
void print(std::initializer_list<T> L)
{
print(std::vector<T>(L));
}

template <class T>
void print(const std::vector<T> &V)
{
// Print as required
}

回答您为什么不能使用原始 print 的问题直接带有初始化列表的模板:编译器无法推断出 T .请记住,模板可以专门化——没有办法知道只有一个 std::vector<int>可以从 std::initializer_list<int> 初始化, 例如。 std::vector<MyCustomType>的特化也可以完全合法地提供这样的构造函数。


并对评论使用react:当然,如果这对您来说更可取,您可以直接在调用站点构建 vector :

template <class T>
void print(std::vector<T> V)
{
// ...
}

print(std::vector<int>{1, 2, 3, 4, 5});

但是,我考虑添加 print 的重载服用std::initializer_list优于此解决方案。

关于c++ - 将模板 vector 文字作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34176938/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com