我尝试编写一个通用状态机,它应该在构造函数中获取所有相关信息。例如。在下面的表格中:
StateMachine stateMachine =
{
{"state1", 1.5f, 4, 'c'},
{"state2", 5.3f, 2, 'z'}
};
StateMachine的构造函数采用initializer_list。 Param是一个包含所有信息的结构。
//constructor
StateMachine(std::initializer_list<param> il)
{
test = new param[il.size()];
for (size_t i = 0; i < il.size(); i++)
test[i] = *(il.begin() + i);
}
结构看起来像这样:
struct param
{
float f;
int i;
char c;
PassTest *test = nullptr;
param()
{
std::cout << "WHY" << std::endl;
}
param(std::string pass, float f, int i, char c) : test(new PassTest(pass)), f(f), i(i), c(c)
{
std::cout << f << '\t' << i << '\t' << c << std::endl;
}
};
到目前为止,我可以将信息{"state1", 1.5f, 4, 'c'}
存储在param的一个对象中。但我想用一个param对象的名称替换字符串“state1”,这样我就可以使用StateMachine构造函数中定义的名称直接访问该对象。
为了让你了解它应该是什么样子。
StateMachine stateMachine =
{
{State1, 1.5f, 4, 'c'}, //State1 and State2 is no longer a String
{State2, 5.3f, 2, 'z'}
};
你知道怎么做吗?
PS。这是一个没有模板或其他动态元素的测试设置。这些将在稍后添加。
答案 0 :(得分:0)
这个问题对我来说还不清楚......
但如果我理解你的问题:
在StateMachine
构造函数中,只需传递param
的常用数组或向量(std::vector<param>
,http://www.cplusplus.com/reference/vector/vector/)
std::vector<param> prlist;
prlist.push_back(param("State1", 1.5f, 4, 'c'));
prlist.push_back(param("State2", 5.3f, 2, 'z'));
StateMachine machine = StateMachine(prlist);
然后你还需要修改StateMachine
类构造函数:
//constructor
StateMachine(std::vector<param> il)
{
test = new param[il.size()];
for (size_t i = 0; i < il.size(); i++)
test[i] = il[i];
}
答案 1 :(得分:0)
所以你想将一个“future”变量名称传递给一个函数,并让函数为你定义变量?对不起,这在C ++中是不可能的。你能得到的最接近的是宏。例如:
#define ADD_NAMED_ENTRY(name,value) \
int name = (value); \
entries.push_back(name);
int main() {
std::vector<int> entries;
ADD_NAMED_ENTRY(first, 1);
ADD_NAMED_ENTRY(second, 42);
// now the vector contains {1,42} but variables first and second also exist and have values 1 and 42, respectively
}
但是,请注意,您无法为value
传递大括号初始值设定项(因为预处理器不理解其{..., ..., ...}
格式并且会在逗号上中断)。您需要将其展开为ADD_NAMED_ENTRY(State1, 1.5f, 4, 'c');
。
在你的情况下,我宁愿建议让StateMachine
保持std::unordered_map
由州名而不是整数编制索引:这样你就可以使用原始代码并引用状态(使用字符串定义)沿着states["state1"]
的路线,而不是用新的符号污染名称范围,不得不应对他们的能见度,生命周期等。