gpt4 book ai didi

c++ - 调用函数,如果有,否则忽略

转载 作者:IT老高 更新时间:2023-10-28 22:27:52 24 4
gpt4 key购买 nike

我现在想做一个模板,它将一些元素推送到 vector 和其他类型,支持 push_back 运算符。

我可以这样做

template<typename T>
T fill(size_t n) {
T v;
//(1)
for(size_t i = 0; i < n; ++i){
v.push_back(generate_some_how());
}
return v;
}

它有效。但现在我想使用 v.reserve(n); 而不是 (1) 来提高支持它的类型的速度。但我仍然希望能够为无法编译的类型编译此代码 reserve

有什么简单的方法可以实现吗?

我知道我可能专注于硬编码类型,但它似乎并不好。

C++11 没问题。

最佳答案

一个使用 C++11 的简单示例:

template<class T>
auto maybe_reserve(T& v, size_t n, int)
-> decltype(v.reserve(n), void())
{
v.reserve(n);
}

template<class T>
void maybe_reserve(T&, size_t, long){}

template<typename T>
T fill(std::size_t n) {
T v;
maybe_reserve(v, n, 0);
for(size_t i = 0; i < n; ++i){
v.push_back(generate_some_how());
}
return v;
}

Live example.解释请看here .

关于c++ - 调用函数,如果有,否则忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302337/

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