c++ - 根据参数数量从函数返回结构对象并将其分配给一般结构的对象

标签 c++ templates struct

我试着解释一下。 我需要一个函数,它获取不同数量的参数(2,3 甚至更多)并基于它返回相应的结构对象:

someStruct funcReturn(bool par1, bool par2, ...)
{
    someStruct temp;
    if (par1)
    {
        //...
    }
    if (par2)
    {
        //...
    }
    ...
    return temp;
}

结构非常简单:

struct ReturnTwo
{
   int one;
   int two;
};

struct ReturnThree
{
   int one;
   int two;
   int three;
};

最后我需要将这个函数的结果分配给一个由四个对象组成的通用结构(缺少的元素初始化为0):

struct ReturnFour
{
   int one;
   int two;
   int three;
   int four;
};
...
ReturnFour returnFour = funcReturn(true, false, ...)

我的问题可以分为两部分:

  1. 有没有办法在函数中使用不同数量的参数并将其逻辑指定到函数中?使用模板可以提供吗?

  2. 如何在不改变结构组织的情况下将一个结构分配给另一个结构?类似auto 的结构?当然我可以通过 С-style 解决这个问题:

    ReturnFour returnFour = {funcReturn(true, false).one,funcReturn(true, false).two,0 ,0}
    

不过我觉得还有更方便的方法。谢谢!

最佳答案

重载函数对你有用吗?

ReturnOne funcReturn(bool par1) { ... }

ReturnTwo funcReturn(bool par1, bool par2) { ... }

等等?另一种可能性是返回一个可选结构,或一堆整数和标志来表示哪些存在。

如果您打算使用参数的运行时(而不是参数的数量)来确定函数返回的类型,那么这是不可能的。在那种情况下,您能做的最好的就是我上面给出的动态建议之一,因为它必须只返回一种类型,并且您可能希望该类型指示它包含哪些值。

最后一个想法是,如果你的 bool 值在编译时已知,你可以使用模板参数而不是函数参数,然后有不同的特化,所以 true/false 值的组合可以选择适当的特化。

关于c++ - 根据参数数量从函数返回结构对象并将其分配给一般结构的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45963786/

相关文章:

C - 这行代码是什么意思?(关于结构)

swift - 从 tableView 中删除 StructItem

c++ - 动画内的动画立方体

c++ - 何时在全局范围内使用 new

c++ - CoCreateInstance 上的 E_ACCESSDENIED,它曾经在这里工作

c++ - 如何将类方法作为参数传递给另一个函数并稍后调用它,最好使变量类方法签名显式?

c++ - 如何在编译时访问模板类的模板类型?

c++ - 有没有办法获取 C++ 可执行文件中存在的类列表?

templates - C++ 模板别名的等价性

C++ 链表不保留新节点