gpt4 book ai didi

c++ - 在一行中初始化 STL valarray

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:23 26 4
gpt4 key购买 nike

您好,我想构建一个辅助类来初始化一个 STL valarray。我想要的是执行以下操作:

std::valarray<float> vec(3);
vlist_of<float>(vec)(2)(3)(5);

所以我可以只使用一行命令语句在运行时初始化 vector 。为了执行以下操作,我尝试了以下结构:

template <typename T>
struct vlist_of {
std::valarray<T>& data;
int i;
vlist_of(std::valarray<T>& _data):data(_data),i(0) {
(*this)(data);
}
vlist_of& operator()(std::valarray<T>& data){return *this;}
vlist_of& operator()(const T& t) {
data [i]=t;
i++;
return *this;
}
};

如果我执行以下操作,此结构将起作用:

vlist_of<float> tmp(vec);tmp(2)(3)(4);

这可能是我问的吗?

最佳答案

是的。使 vlist_of 成为工厂函数:

template <typename T>
vlist_builder<T> vlist_of(std::valarray<T>& data)
{
return vlist_builder<T>(data);
}

现在可以了 http://liveworkspace.org/code/48aszl$0 .

我个人更喜欢统一初始化:

/*const*/ std::valarray<float> prefer { 2, 3, 5 };

查看完整示例:

#include <valarray>
#include <vector>
#include <iostream>

template <typename T>
struct vlist_builder
{
std::valarray<T>& data;
int i;
vlist_builder(std::valarray<T>& _data):data(_data),i(0) { }
vlist_builder& operator()(const T& t)
{
data[i++]=t;
return *this;
}
};

template <typename T>
vlist_builder<T> vlist_of(std::valarray<T>& data)
{
return vlist_builder<T>(data);
}

int main()
{
std::valarray<float> vec(3);
vlist_of<float>(vec)(2)(3)(5);

for(auto f : vec)
std::cout << f << "\n";

// prefer uniform initialization:
const std::valarray<float> prefer { 2, 3, 5 };
}

关于c++ - 在一行中初始化 STL valarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497186/

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