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