我在OpenVDB文档中遇到了以下代码:

template<typename _RootNodeType>
class Tree: public TreeBase
{
...
    template<typename OtherTreeType>
    Tree(const OtherTreeType& other,
        const ValueType& inactiveValue,
        const ValueType& activeValue,
        TopologyCopy): // <-- this looks weird
        TreeBase(other),
        mRoot(other.root(), inactiveValue, activeValue, TopologyCopy())
    {
}

我以前见过,如果未指定类型,则为defaults to an int 参数,但是在这种情况下可以吗? TopologyCopy在下面两行被称为运算符。

上面的声明有什么意义?

编辑:
接受的答案说明了正在发生的事情。解决方案是将函数调用为
openvdb::Tree newTree(oldTree, inactiveValue, activeValue, TopologyCopy());

最佳答案

这不是没有类型的参数。这是一个没有名字的论点。它的类型是TopologyCopyTopologyCopy()是默认构造该类型的对象,并将其传递给mRoot的构造函数。如果我不得不猜测,我会说他们可能在这里使用标记分派(dispatch)在具有其他相同参数的不同构造函数之间进行选择。

09-06 22:36