我不确定是否可以进行以下操作。有人可以为此要求提供同等的费用吗?

if(dimension==2)
  function = function2D();
else if(dimension==3)
  function = function3D();

for(....) {
  function();
}

最佳答案

可能有两个假设:


function2D()function3D()都具有相同的签名和返回类型。
function是一个函数指针,具有与function2Dfunction3D相同的返回类型和参数。


您正在探索的技术与构造jump table所使用的技术非常相似。您有一个函数指针,您可以在运行时根据运行时条件对其进行分配(并调用)。

这是一个例子:

int function2D()
{
  // ...
}

int function3D()
{
  // ...
}

int main()
{
  int (*function)();  // Declaration of a pointer named 'function', which is a function pointer.  The pointer points to a function returning an 'int' and takes no parameters.

  // ...
  if(dimension==2)
    function = function2D;  // note no parens here.  We want the address of the function -- not to call the function
  else if(dimension==3)
    function = function3D;

  for (...)
  {
    function();
  }
}

08-17 03:50