C++ 在一行中初始化stl数组
您好,我想构建一个助手类来初始化stl数组。我想做的是:C++ 在一行中初始化stl数组,c++,arrays,stl,valarray,C++,Arrays,Stl,Valarray,您好,我想构建一个助手类来初始化stl数组。我想做的是: std::valarray<float> vec(3); vlist_of<float>(vec)(2)(3)(5); std::valarray-vec(3); (vec)(2)(3)(5)的列表; 因此,我可以在运行时仅使用一行命令语句初始化向量。 为了完成以下工作,我尝试了以下结构: template <typename T> struct vlist_of { std::valarr
std::valarray<float> vec(3);
vlist_of<float>(vec)(2)(3)(5);
std::valarray-vec(3);
(vec)(2)(3)(5)的列表;
因此,我可以在运行时仅使用一行命令语句初始化向量。
为了完成以下工作,我尝试了以下结构:
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;
}
};
模板
结构列表{
std::valarray和data;
int i;
vlist of(std::valarray&_data):数据(_data),i(0){
(*此)(数据);
}
vlist_of&operator()(std::valarray&data){return*this;}
运算符()的列表(常数T&T){
数据[i]=t;
i++;
归还*这个;
}
};
如果我执行以下操作,此结构将正常工作:
vlist_of<float> tmp(vec);tmp(2)(3)(4);
tmp(vec)的列表;tmp(2)(3)(4);
有可能是我问的吗?有。将列表设置为工厂功能:
template <typename T>
vlist_builder<T> vlist_of(std::valarray<T>& data)
{
return vlist_builder<T>(data);
}
模板
vlist_生成器vlist_of(标准::valarray&data)
{
返回vlist_生成器(数据);
}
现在它起作用了
我个人更喜欢统一初始化:
/*const*/ std::valarray<float> prefer { 2, 3, 5 };
/*const*/std::valarray首选{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 };
}
#包括
#包括
#包括
模板
结构列表生成器
{
std::valarray和data;
int i;
vlist_生成器(std::valarray&_data):数据(_data),i(0){
vlist_生成器和运算符()(常量T&T)
{
数据[i++]=t;
归还*这个;
}
};
模板
vlist_生成器vlist_of(标准::valarray&data)
{
返回vlist_生成器(数据);
}
int main()
{
std:valarray-vec(3);
(vec)(2)(3)(5)的列表;
用于(自动f:vec)
std::难道我不明白你在寻找什么样的答案。顺便问一下,(*this)(数据);
用于什么v@Magtheridon96我认为他正在寻找Valarray的Boost-Assign
风格的初始化