我正在编写一个API,其中一个函数调用意味着调用一系列树节点的工厂,这些树节点接受许多参数,其中一些参数是相同的,有些参数是不同的。关键在于,用户需要指定树的确切结构--算法上这样做将与我试图提供的内容背道而驰。我的问题是,构造函数调用的最佳(最直观的)方式是什么?到目前为止,我最好的想法是:
void FooClass::createTree(
{
{2},
{4, 5},
{2, 2, 2, 2, 2, 2, 2, 2, 0}
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
},
{
{"N1"},
{"N2-1", "N2-2"},
{"N3-1", "N3-2", "N3-3", "N3-4", "N3-5", "N3-6", "N3-7", "N3-8", "N3-9"},
{"N4-1", "N4-2", "N4-3", "N4-4", "N4-5", "N4-6", "N4-7", "N4-8", "N4-9", "N4-10", "N4-11", "N4-12", "N4-13", "N4-14", "N4-15", "N4-16"}
},
other_args...
)很明显,0意味着某个分支的终止。它是在C++中构建的,它是作为库函数的一部分提供的,在库函数中,FooClass在内部使用树。
我意识到,最终,对于不同的参数组合,我需要不同的调用,但我遇到的是“基本情况”格式。我还想避免使用Builder对象(正如建议的那样),因为最终由用户指定的树必须从下向上构造(这是问题域的结果--这是不可避免的约束)。
发布于 2016-07-09 05:27:30
毕竟,我决定使用一个简单的生成器对象。这个惯用的调用看起来有点像这样:
FooClass.createTree(
TreeBuilder("N1")
.addSubNodes("N1", {"N2-1", "N2-2"})
.addSubNodes("N2-1", {"N3-1", "N3-2", "N3-3"})
.addSubNodes("N2-2", {"N3-4", "N3-5"}),
other_args...
);https://softwareengineering.stackexchange.com/questions/324384
复制相似问题