Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用vector和push_开始boost mpl_C++_Boost_Vector_Boost Mpl_Push Back - Fatal编程技术网

C++ 使用vector和push_开始boost mpl

C++ 使用vector和push_开始boost mpl,c++,boost,vector,boost-mpl,push-back,C++,Boost,Vector,Boost Mpl,Push Back,我已经挠头太久了,我发现使用MPL非常困难,希望有人能让我开始。下面是我正在开发的一个不使用MPL的类的部分代码。我最终希望在编译时实现这个类。这段代码可能没有意义,但我不希望所有的解决方案都使用MPL——希望我自己能实现这一点(请参阅下面的帮助) 类定义单元类型{ 公众: 定义单元类型()=默认值; 定义单元类型(常数std::字符串和单元名称): cName{name{u of_cell}{}; double&add_变量(const std::string&Name, const doub

我已经挠头太久了,我发现使用MPL非常困难,希望有人能让我开始。下面是我正在开发的一个不使用MPL的类的部分代码。我最终希望在编译时实现这个类。这段代码可能没有意义,但我不希望所有的解决方案都使用MPL——希望我自己能实现这一点(请参阅下面的帮助)

类定义单元类型{
公众:
定义单元类型()=默认值;
定义单元类型(常数std::字符串和单元名称):
cName{name{u of_cell}{};
double&add_变量(const std::string&Name,
const double和init_值,
变量declr_类型=变量::静态(V)
{
vInit值推回(初始值);
vData.push_back(std::make_tuple(Name));
返回vInit_val.back();
};
私人:
std::字符串cName;
std::向量vInit_val;
std::矢量数据;
};
首先,我如何在类型为double的mpl::vector上推回_?这是一个我想从类似于我正在开发的类中的函数开始的示例

std::vector<double> state;
double& add_variable ( const double& init_val)
{
    state.push_back(init_val);
    return state.back();
} 

int main() {
    auto var1 = add_variable (12.2);
    auto var2 = add_variable (1.2);
    auto var2 = add_variable (6.4);
}
std::向量状态;
double和add_变量(constdouble和init_val)
{
状态。推回(初始值);
返回状态。返回();
} 
int main(){
自动变量1=添加变量(12.2);
自动变量2=添加变量(1.2);
自动变量2=添加变量(6.4);
}
我能得到的就是这样的东西

typedef mpl::vector<double> state;
typedef mpl::push_back<state,double>::type types;
typedefmpl::向量状态;
typedef mpl::push_back::type类型;

如果有人让我开始生成一个编译时向量,将上面的示例推后,我将不胜感激。看起来您希望在向量中存储实际的、运行时确定的值,是真的吗?因为在这种情况下,使用元组或boost.fusion将是更好的解决方案。Mpl vector是类型列表,而不是值列表。您可以创建表示整型常量的类型,但在类型中编码浮点并不容易。@谢谢您的评论,所有这些值在编译时都是已知的。您不能将值存储为双精度值,只能存储整型常量(如int、bool和函数指针)。您可以设计一种方法将数字存储为整数常量(可能是整数的比率)。或者您可以将这些值存储在一个数组中。@Paul这对于我的程序、tuple或c++11数组来说是很好的,尽管它们的数量是可变的。是否可以允许自动生成这些类型的mpl/融合向量,作为类似于push_back的功能?我现在可以想到的是fusion::make_vector(var1,var2,…,varN),其中varx是某种类型double的std::array或constexpr元组存储。注意,N在编译时可能会变化。但这是一种干扰,因为每次有很多变量时,我都必须更改这部分代码change@woosahMpl/融合/元组/数组都是不可变的数据结构。使用
push_back
只会创建一个新类型,新值位于末尾。似乎您希望在代码中的不同位置注册这些值。我不知道您想要用这些值实现什么,但是您可能需要在运行时注册它们。
typedef mpl::vector<double> state;
typedef mpl::push_back<state,double>::type types;